{
  "fileName": "Package.sol",
  "contractName": "Package",
  "source": "pragma solidity ^0.5.0;\n\nimport \"../ownership/Ownable.sol\";\n\n/**\n * @title Package\n * @dev A package is composed by a set of versions, identified via semantic versioning,\n * where each version has a contract address that refers to a reusable implementation,\n * plus an optional content URI with metadata. Note that the semver identifier is restricted\n * to major, minor, and patch, as prerelease tags are not supported.\n */\ncontract Package is OpenZeppelinUpgradesOwnable {\n  /**\n   * @dev Emitted when a version is added to the package.\n   * @param semanticVersion Name of the added version.\n   * @param contractAddress Contract associated with the version.\n   * @param contentURI Optional content URI with metadata of the version.\n   */\n  event VersionAdded(uint64[3] semanticVersion, address contractAddress, bytes contentURI);\n\n  struct Version {\n    uint64[3] semanticVersion;\n    address contractAddress;\n    bytes contentURI; \n  }\n\n  mapping (bytes32 => Version) internal versions;\n  mapping (uint64 => bytes32) internal majorToLatestVersion;\n  uint64 internal latestMajor;\n\n  /**\n   * @dev Returns a version given its semver identifier.\n   * @param semanticVersion Semver identifier of the version.\n   * @return Contract address and content URI for the version, or zero if not exists.\n   */\n  function getVersion(uint64[3] memory semanticVersion) public view returns (address contractAddress, bytes memory contentURI) {\n    Version storage version = versions[semanticVersionHash(semanticVersion)];\n    return (version.contractAddress, version.contentURI); \n  }\n\n  /**\n   * @dev Returns a contract for a version given its semver identifier.\n   * This method is equivalent to `getVersion`, but returns only the contract address.\n   * @param semanticVersion Semver identifier of the version.\n   * @return Contract address for the version, or zero if not exists.\n   */\n  function getContract(uint64[3] memory semanticVersion) public view returns (address contractAddress) {\n    Version storage version = versions[semanticVersionHash(semanticVersion)];\n    return version.contractAddress;\n  }\n\n  /**\n   * @dev Adds a new version to the package. Only the Owner can add new versions.\n   * Reverts if the specified semver identifier already exists. \n   * Emits a `VersionAdded` event if successful.\n   * @param semanticVersion Semver identifier of the version.\n   * @param contractAddress Contract address for the version, must be non-zero.\n   * @param contentURI Optional content URI for the version.\n   */\n  function addVersion(uint64[3] memory semanticVersion, address contractAddress, bytes memory contentURI) public onlyOwner {\n    require(contractAddress != address(0), \"Contract address is required\");\n    require(!hasVersion(semanticVersion), \"Given version is already registered in package\");\n    require(!semanticVersionIsZero(semanticVersion), \"Version must be non zero\");\n\n    // Register version\n    bytes32 versionId = semanticVersionHash(semanticVersion);\n    versions[versionId] = Version(semanticVersion, contractAddress, contentURI);\n    \n    // Update latest major\n    uint64 major = semanticVersion[0];\n    if (major > latestMajor) {\n      latestMajor = semanticVersion[0];\n    }\n\n    // Update latest version for this major\n    uint64 minor = semanticVersion[1];\n    uint64 patch = semanticVersion[2];\n    uint64[3] storage latestVersionForMajor = versions[majorToLatestVersion[major]].semanticVersion;\n    if (semanticVersionIsZero(latestVersionForMajor) // No latest was set for this major\n       || (minor > latestVersionForMajor[1]) // Or current minor is greater \n       || (minor == latestVersionForMajor[1] && patch > latestVersionForMajor[2]) // Or current patch is greater\n       ) { \n      majorToLatestVersion[major] = versionId;\n    }\n\n    emit VersionAdded(semanticVersion, contractAddress, contentURI);\n  }\n\n  /**\n   * @dev Checks whether a version is present in the package.\n   * @param semanticVersion Semver identifier of the version.\n   * @return true if the version is registered in this package, false otherwise.\n   */\n  function hasVersion(uint64[3] memory semanticVersion) public view returns (bool) {\n    Version storage version = versions[semanticVersionHash(semanticVersion)];\n    return address(version.contractAddress) != address(0);\n  }\n\n  /**\n   * @dev Returns the version with the highest semver identifier registered in the package.\n   * For instance, if `1.2.0`, `1.3.0`, and `2.0.0` are present, will always return `2.0.0`, regardless \n   * of the order in which they were registered. Returns zero if no versions are registered.\n   * @return Semver identifier, contract address, and content URI for the version, or zero if not exists.\n   */\n  function getLatest() public view returns (uint64[3] memory semanticVersion, address contractAddress, bytes memory contentURI) {\n    return getLatestByMajor(latestMajor);\n  }\n\n  /**\n   * @dev Returns the version with the highest semver identifier for the given major.\n   * For instance, if `1.2.0`, `1.3.0`, and `2.0.0` are present, will return `1.3.0` for major `1`, \n   * regardless of the order in which they were registered. Returns zero if no versions are registered\n   * for the specified major.\n   * @param major Major identifier to query\n   * @return Semver identifier, contract address, and content URI for the version, or zero if not exists.\n   */\n  function getLatestByMajor(uint64 major) public view returns (uint64[3] memory semanticVersion, address contractAddress, bytes memory contentURI) {\n    Version storage version = versions[majorToLatestVersion[major]];\n    return (version.semanticVersion, version.contractAddress, version.contentURI); \n  }\n\n  function semanticVersionHash(uint64[3] memory version) internal pure returns (bytes32) {\n    return keccak256(abi.encodePacked(version[0], version[1], version[2]));\n  }\n\n  function semanticVersionIsZero(uint64[3] memory version) internal pure returns (bool) {\n    return version[0] == 0 && version[1] == 0 && version[2] == 0;\n  }\n}\n",
  "sourcePath": "contracts/application/Package.sol",
  "sourceMap": "424:5570:4:-;;;989:10:33;980:6;;:19;;;;;;;;;;;;;;;;;;1047:6;;;;;;;;;;;1014:40;;1043:1;1014:40;;;;;;;;;;;;424:5570:4;;;;;;",
  "deployedSourceMap": "424:5570:4:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;424:5570:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1875:220;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1875:220:4;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1875:220:4;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4062:223;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4062:223:4;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4062:223:4;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1812:137:33;;;:::i;:::-;;1124:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1444:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5356:303:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5356:303:4;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5356:303:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5356:303:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4697:173;;;:::i;:::-;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4697:173:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4697:173:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2510:1331;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;2510:1331:4;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2510:1331:4;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2510:1331:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2510:1331:4;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2510:1331:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2510:1331:4;;;;;;;;;;;;;;;:::i;:::-;;1301:267;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1301:267:4;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1301:267:4;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1301:267:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2120:107:33;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2120:107:33;;;;;;;;;;;;;;;;;;;:::i;:::-;;1875:220:4;1951:23;1982;2008:8;:46;2017:36;2037:15;2017:19;:36::i;:::-;2008:46;;;;;;;;;;;1982:72;;2067:7;:23;;;;;;;;;;;;2060:30;;;1875:220;;;:::o;4062:223::-;4137:4;4149:23;4175:8;:46;4184:36;4204:15;4184:19;:36::i;:::-;4175:46;;;;;;;;;;;4149:72;;4278:1;4234:46;;4242:7;:23;;;;;;;;;;;;4234:46;;;;4227:53;;;4062:223;;;:::o;1812:137:33:-;1328:9;:7;:9::i;:::-;1320:18;;;;;;;;1910:1;1873:40;;1894:6;;;;;;;;;;;1873:40;;;;;;;;;;;;1940:1;1923:6;;:19;;;;;;;;;;;;;;;;;;1812:137::o;1124:77::-;1162:7;1188:6;;;;;;;;;;;1181:13;;1124:77;:::o;1444:90::-;1484:4;1521:6;;;;;;;;;;;1507:20;;:10;:20;;;1500:27;;1444:90;:::o;5356:303:4:-;5417:32;;:::i;:::-;5451:23;5476;5507;5533:8;:37;5542:20;:27;5563:5;5542:27;;;;;;;;;;;;;;;;5533:37;;;;;;;;;;;5507:63;;5584:7;:23;;5609:7;:23;;;;;;;;;;;;5634:7;:18;;5576:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5356:303;;;;;:::o;4697:173::-;4739:32;;:::i;:::-;4773:23;4798;4836:29;4853:11;;;;;;;;;;;4836:16;:29::i;:::-;4829:36;;;;;;4697:173;;;:::o;2510:1331::-;1328:9:33;:7;:9::i;:::-;1320:18;;;;;;;;2672:1:4;2645:29;;:15;:29;;;;2637:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2722:27;2733:15;2722:10;:27::i;:::-;2721:28;2713:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2815:38;2837:15;2815:21;:38::i;:::-;2814:39;2806:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2913:17;2933:36;2953:15;2933:19;:36::i;:::-;2913:56;;2997:53;;;;;;;;;3005:15;2997:53;;;;3022:15;2997:53;;;;;;3039:10;2997:53;;;2975:8;:19;2984:9;2975:19;;;;;;;;;;;:75;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;3088:12;3103:15;3119:1;3103:18;;;;;;;;;;;;;3088:33;;3139:11;;;;;;;;;;;3131:19;;:5;:19;;;3127:72;;;3174:15;3190:1;3174:18;;;;;;;;;;;;;3160:11;;:32;;;;;;;;;;;;;;;;;;3127:72;3249:12;3264:15;3280:1;3264:18;;;;;;;;;;;;;3249:33;;3288:12;3303:15;3319:1;3303:18;;;;;;;;;;;;;3288:33;;3327:39;3369:8;:37;3378:20;:27;3399:5;3378:27;;;;;;;;;;;;;;;;3369:37;;;;;;;;;;;:53;;3327:95;;3432:44;3454:21;3432:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;:44::i;:::-;:125;;;;3532:21;3554:1;3532:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3524:32;;:5;:32;;;3432:125;:239;;;;3610:21;3632:1;3610:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3601:33;;:5;:33;;;:69;;;;;3646:21;3668:1;3646:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3638:32;;:5;:32;;;3601:69;3432:239;3428:339;;;3751:9;3721:20;:27;3742:5;3721:27;;;;;;;;;;;;;;;:39;;;;3428:339;3778:58;3791:15;3808;3825:10;3778:58;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3778:58:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3778:58:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1348:1:33;;;;;2510:1331:4;;;:::o;1301:267::-;1376:23;1401;1432;1458:8;:46;1467:36;1487:15;1467:19;:36::i;:::-;1458:46;;;;;;;;;;;1432:72;;1518:7;:23;;;;;;;;;;;;1543:7;:18;;1510:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1301:267;;;:::o;2120:107:33:-;1328:9;:7;:9::i;:::-;1320:18;;;;;;;;2192:28;2211:8;2192:18;:28::i;:::-;2120:107;:::o;5663:168:4:-;5741:7;5790;5798:1;5790:10;;;;;;;;;;;;;5802:7;5810:1;5802:10;;;;;;;;;;;;;5814:7;5822:1;5814:10;;;;;;;;;;;;;5773:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5773:52:4;;;5763:63;;;;;;5756:70;;5663:168;;;:::o;5835:157::-;5915:4;5948:1;5934:7;5942:1;5934:10;;;;;;;;;;;;;:15;;;:34;;;;;5967:1;5953:7;5961:1;5953:10;;;;;;;;;;;;;:15;;;5934:34;:53;;;;;5986:1;5972:7;5980:1;5972:10;;;;;;;;;;;;;:15;;;5934:53;5927:60;;5835:157;;;:::o;2371:183:33:-;2464:1;2444:22;;:8;:22;;;;2436:31;;;;;;;;2511:8;2482:38;;2503:6;;;;;;;;;;;2482:38;;;;;;;;;;;;2539:8;2530:6;;:17;;;;;;;;;;;;;;;;;;2371:183;:::o;424:5570:4:-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;424:5570:4;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "semanticVersion",
          "type": "uint64[3]"
        }
      ],
      "name": "getContract",
      "outputs": [
        {
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "semanticVersion",
          "type": "uint64[3]"
        }
      ],
      "name": "hasVersion",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "major",
          "type": "uint64"
        }
      ],
      "name": "getLatestByMajor",
      "outputs": [
        {
          "name": "semanticVersion",
          "type": "uint64[3]"
        },
        {
          "name": "contractAddress",
          "type": "address"
        },
        {
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLatest",
      "outputs": [
        {
          "name": "semanticVersion",
          "type": "uint64[3]"
        },
        {
          "name": "contractAddress",
          "type": "address"
        },
        {
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "semanticVersion",
          "type": "uint64[3]"
        },
        {
          "name": "contractAddress",
          "type": "address"
        },
        {
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "name": "addVersion",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "semanticVersion",
          "type": "uint64[3]"
        }
      ],
      "name": "getVersion",
      "outputs": [
        {
          "name": "contractAddress",
          "type": "address"
        },
        {
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "semanticVersion",
          "type": "uint64[3]"
        },
        {
          "indexed": false,
          "name": "contractAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "name": "VersionAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    }
  ],
  "ast": {
    "absolutePath": "contracts/application/Package.sol",
    "exportedSymbols": {
      "Package": [
        793
      ]
    },
    "id": 794,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 454,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:4"
      },
      {
        "absolutePath": "contracts/ownership/Ownable.sol",
        "file": "../ownership/Ownable.sol",
        "id": 455,
        "nodeType": "ImportDirective",
        "scope": 794,
        "sourceUnit": 5494,
        "src": "25:34:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 456,
              "name": "OpenZeppelinUpgradesOwnable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5493,
              "src": "444:27:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OpenZeppelinUpgradesOwnable_$5493",
                "typeString": "contract OpenZeppelinUpgradesOwnable"
              }
            },
            "id": 457,
            "nodeType": "InheritanceSpecifier",
            "src": "444:27:4"
          }
        ],
        "contractDependencies": [
          5493
        ],
        "contractKind": "contract",
        "documentation": "@title Package\n@dev A package is composed by a set of versions, identified via semantic versioning,\nwhere each version has a contract address that refers to a reusable implementation,\nplus an optional content URI with metadata. Note that the semver identifier is restricted\nto major, minor, and patch, as prerelease tags are not supported.",
        "fullyImplemented": true,
        "id": 793,
        "linearizedBaseContracts": [
          793,
          5493
        ],
        "name": "Package",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": "@dev Emitted when a version is added to the package.\n@param semanticVersion Name of the added version.\n@param contractAddress Contract associated with the version.\n@param contentURI Optional content URI with metadata of the version.",
            "id": 467,
            "name": "VersionAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 466,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 461,
                  "indexed": false,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 467,
                  "src": "760:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 458,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "760:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 460,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "767:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "760:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 463,
                  "indexed": false,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 467,
                  "src": "787:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 462,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "787:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 465,
                  "indexed": false,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 467,
                  "src": "812:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 464,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "812:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "759:70:4"
            },
            "src": "741:89:4"
          },
          {
            "canonicalName": "Package.Version",
            "id": 476,
            "members": [
              {
                "constant": false,
                "id": 471,
                "name": "semanticVersion",
                "nodeType": "VariableDeclaration",
                "scope": 476,
                "src": "855:25:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                  "typeString": "uint64[3]"
                },
                "typeName": {
                  "baseType": {
                    "id": 468,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "855:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 470,
                  "length": {
                    "argumentTypes": null,
                    "hexValue": "33",
                    "id": 469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "862:1:4",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": null,
                      "typeString": null
                    },
                    "value": "3"
                  },
                  "nodeType": "ArrayTypeName",
                  "src": "855:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                    "typeString": "uint64[3]"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 473,
                "name": "contractAddress",
                "nodeType": "VariableDeclaration",
                "scope": 476,
                "src": "886:23:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 472,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "886:7:4",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 475,
                "name": "contentURI",
                "nodeType": "VariableDeclaration",
                "scope": 476,
                "src": "915:16:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 474,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "915:5:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Version",
            "nodeType": "StructDefinition",
            "scope": 793,
            "src": "834:103:4",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 480,
            "name": "versions",
            "nodeType": "VariableDeclaration",
            "scope": 793,
            "src": "941:46:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$476_storage_$",
              "typeString": "mapping(bytes32 => struct Package.Version)"
            },
            "typeName": {
              "id": 479,
              "keyType": {
                "id": 477,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "950:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "941:28:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$476_storage_$",
                "typeString": "mapping(bytes32 => struct Package.Version)"
              },
              "valueType": {
                "contractScope": null,
                "id": 478,
                "name": "Version",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 476,
                "src": "961:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                  "typeString": "struct Package.Version"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 484,
            "name": "majorToLatestVersion",
            "nodeType": "VariableDeclaration",
            "scope": 793,
            "src": "991:57:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
              "typeString": "mapping(uint64 => bytes32)"
            },
            "typeName": {
              "id": 483,
              "keyType": {
                "id": 481,
                "name": "uint64",
                "nodeType": "ElementaryTypeName",
                "src": "1000:6:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                }
              },
              "nodeType": "Mapping",
              "src": "991:27:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                "typeString": "mapping(uint64 => bytes32)"
              },
              "valueType": {
                "id": 482,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1010:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 486,
            "name": "latestMajor",
            "nodeType": "VariableDeclaration",
            "scope": 793,
            "src": "1052:27:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 485,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1052:6:4",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 511,
              "nodeType": "Block",
              "src": "1426:142:4",
              "statements": [
                {
                  "assignments": [
                    498
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 498,
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "scope": 511,
                      "src": "1432:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 497,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 476,
                        "src": "1432:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 504,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 499,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 480,
                      "src": "1458:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$476_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 503,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 501,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 490,
                          "src": "1487:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        ],
                        "id": 500,
                        "name": "semanticVersionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 764,
                        "src": "1467:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 502,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1467:36:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1458:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$476_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1432:72:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 505,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 498,
                          "src": "1518:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 506,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contractAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 473,
                        "src": "1518:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 507,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 498,
                          "src": "1543:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 508,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contentURI",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 475,
                        "src": "1543:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "id": 509,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1517:45:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_bytes_storage_$",
                      "typeString": "tuple(address,bytes storage ref)"
                    }
                  },
                  "functionReturnParameters": 496,
                  "id": 510,
                  "nodeType": "Return",
                  "src": "1510:52:4"
                }
              ]
            },
            "documentation": "@dev Returns a version given its semver identifier.\n@param semanticVersion Semver identifier of the version.\n@return Contract address and content URI for the version, or zero if not exists.",
            "id": 512,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVersion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 491,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 490,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 512,
                  "src": "1321:32:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 487,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "1321:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 489,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 488,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1328:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "1321:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1320:34:4"
            },
            "returnParameters": {
              "id": 496,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 493,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 512,
                  "src": "1376:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 492,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1376:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 495,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 512,
                  "src": "1401:23:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 494,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1401:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1375:50:4"
            },
            "scope": 793,
            "src": "1301:267:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 532,
              "nodeType": "Block",
              "src": "1976:119:4",
              "statements": [
                {
                  "assignments": [
                    522
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 522,
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "scope": 532,
                      "src": "1982:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 521,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 476,
                        "src": "1982:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 528,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 523,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 480,
                      "src": "2008:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$476_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 527,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 525,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 516,
                          "src": "2037:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        ],
                        "id": 524,
                        "name": "semanticVersionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 764,
                        "src": "2017:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 526,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2017:36:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2008:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$476_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1982:72:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 529,
                      "name": "version",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 522,
                      "src": "2067:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                        "typeString": "struct Package.Version storage pointer"
                      }
                    },
                    "id": 530,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "contractAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 473,
                    "src": "2067:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 520,
                  "id": 531,
                  "nodeType": "Return",
                  "src": "2060:30:4"
                }
              ]
            },
            "documentation": "@dev Returns a contract for a version given its semver identifier.\nThis method is equivalent to `getVersion`, but returns only the contract address.\n@param semanticVersion Semver identifier of the version.\n@return Contract address for the version, or zero if not exists.",
            "id": 533,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 517,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 516,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 533,
                  "src": "1896:32:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 513,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "1896:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 515,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 514,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1903:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "1896:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1895:34:4"
            },
            "returnParameters": {
              "id": 520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 519,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 533,
                  "src": "1951:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 518,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1951:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1950:25:4"
            },
            "scope": 793,
            "src": "1875:220:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 665,
              "nodeType": "Block",
              "src": "2631:1210:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 547,
                          "name": "contractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 539,
                          "src": "2645:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 549,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2672:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 548,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2664:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2664:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2645:29:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "436f6e74726163742061646472657373206973207265717569726564",
                        "id": 552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2676:30:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_780e49f834be75d00932cec8d636b1a7b22db8f51cf085cf57f0b010ea79c7d2",
                          "typeString": "literal_string \"Contract address is required\""
                        },
                        "value": "Contract address is required"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_780e49f834be75d00932cec8d636b1a7b22db8f51cf085cf57f0b010ea79c7d2",
                          "typeString": "literal_string \"Contract address is required\""
                        }
                      ],
                      "id": 546,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        6466,
                        6467
                      ],
                      "referencedDeclaration": 6467,
                      "src": "2637:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 553,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2637:70:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 554,
                  "nodeType": "ExpressionStatement",
                  "src": "2637:70:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 559,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2721:28:4",
                        "subExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 557,
                              "name": "semanticVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 537,
                              "src": "2733:15:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            ],
                            "id": 556,
                            "name": "hasVersion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 693,
                            "src": "2722:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (uint64[3] memory) view returns (bool)"
                            }
                          },
                          "id": 558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2722:27:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "476976656e2076657273696f6e20697320616c7265616479207265676973746572656420696e207061636b616765",
                        "id": 560,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2751:48:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b3ae3984ba439aa79dd8a004069b5c408247b6da429c2768dd9a60b038d8514",
                          "typeString": "literal_string \"Given version is already registered in package\""
                        },
                        "value": "Given version is already registered in package"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b3ae3984ba439aa79dd8a004069b5c408247b6da429c2768dd9a60b038d8514",
                          "typeString": "literal_string \"Given version is already registered in package\""
                        }
                      ],
                      "id": 555,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        6466,
                        6467
                      ],
                      "referencedDeclaration": 6467,
                      "src": "2713:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2713:87:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 562,
                  "nodeType": "ExpressionStatement",
                  "src": "2713:87:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 567,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2814:39:4",
                        "subExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 565,
                              "name": "semanticVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 537,
                              "src": "2837:15:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            ],
                            "id": 564,
                            "name": "semanticVersionIsZero",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 792,
                            "src": "2815:21:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (uint64[3] memory) pure returns (bool)"
                            }
                          },
                          "id": 566,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2815:38:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "56657273696f6e206d757374206265206e6f6e207a65726f",
                        "id": 568,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2855:26:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ae50164b17b79ab427212ce5adf036461d23ee5ab8d14bb5bfd84b837662d57a",
                          "typeString": "literal_string \"Version must be non zero\""
                        },
                        "value": "Version must be non zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ae50164b17b79ab427212ce5adf036461d23ee5ab8d14bb5bfd84b837662d57a",
                          "typeString": "literal_string \"Version must be non zero\""
                        }
                      ],
                      "id": 563,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        6466,
                        6467
                      ],
                      "referencedDeclaration": 6467,
                      "src": "2806:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2806:76:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 570,
                  "nodeType": "ExpressionStatement",
                  "src": "2806:76:4"
                },
                {
                  "assignments": [
                    572
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 572,
                      "name": "versionId",
                      "nodeType": "VariableDeclaration",
                      "scope": 665,
                      "src": "2913:17:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 571,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2913:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 576,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 574,
                        "name": "semanticVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 537,
                        "src": "2953:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      ],
                      "id": 573,
                      "name": "semanticVersionHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 764,
                      "src": "2933:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                      }
                    },
                    "id": 575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2933:36:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2913:56:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 585,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 577,
                        "name": "versions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 480,
                        "src": "2975:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$476_storage_$",
                          "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                        }
                      },
                      "id": 579,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 578,
                        "name": "versionId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 572,
                        "src": "2984:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2975:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$476_storage",
                        "typeString": "struct Package.Version storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 581,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 537,
                          "src": "3005:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 582,
                          "name": "contractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 539,
                          "src": "3022:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 583,
                          "name": "contentURI",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 541,
                          "src": "3039:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 580,
                        "name": "Version",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 476,
                        "src": "2997:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Version_$476_storage_ptr_$",
                          "typeString": "type(struct Package.Version storage pointer)"
                        }
                      },
                      "id": 584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2997:53:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$476_memory",
                        "typeString": "struct Package.Version memory"
                      }
                    },
                    "src": "2975:75:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$476_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "id": 586,
                  "nodeType": "ExpressionStatement",
                  "src": "2975:75:4"
                },
                {
                  "assignments": [
                    588
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 588,
                      "name": "major",
                      "nodeType": "VariableDeclaration",
                      "scope": 665,
                      "src": "3088:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 587,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "3088:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 592,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 589,
                      "name": "semanticVersion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 537,
                      "src": "3103:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                        "typeString": "uint64[3] memory"
                      }
                    },
                    "id": 591,
                    "indexExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 590,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3119:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3103:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3088:33:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 593,
                      "name": "major",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 588,
                      "src": "3131:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 594,
                      "name": "latestMajor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 486,
                      "src": "3139:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "3131:19:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 603,
                  "nodeType": "IfStatement",
                  "src": "3127:72:4",
                  "trueBody": {
                    "id": 602,
                    "nodeType": "Block",
                    "src": "3152:47:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 600,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 596,
                            "name": "latestMajor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 486,
                            "src": "3160:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 597,
                              "name": "semanticVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 537,
                              "src": "3174:15:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 599,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 598,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3190:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3174:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "3160:32:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 601,
                        "nodeType": "ExpressionStatement",
                        "src": "3160:32:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    605
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 605,
                      "name": "minor",
                      "nodeType": "VariableDeclaration",
                      "scope": 665,
                      "src": "3249:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 604,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "3249:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 609,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 606,
                      "name": "semanticVersion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 537,
                      "src": "3264:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                        "typeString": "uint64[3] memory"
                      }
                    },
                    "id": 608,
                    "indexExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 607,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3280:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3264:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3249:33:4"
                },
                {
                  "assignments": [
                    611
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 611,
                      "name": "patch",
                      "nodeType": "VariableDeclaration",
                      "scope": 665,
                      "src": "3288:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 610,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "3288:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 615,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 612,
                      "name": "semanticVersion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 537,
                      "src": "3303:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                        "typeString": "uint64[3] memory"
                      }
                    },
                    "id": 614,
                    "indexExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 613,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3319:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3303:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3288:33:4"
                },
                {
                  "assignments": [
                    620
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 620,
                      "name": "latestVersionForMajor",
                      "nodeType": "VariableDeclaration",
                      "scope": 665,
                      "src": "3327:39:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                        "typeString": "uint64[3]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 618,
                          "name": "uint64",
                          "nodeType": "ElementaryTypeName",
                          "src": "3327:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 619,
                        "length": {
                          "argumentTypes": null,
                          "hexValue": "33",
                          "id": 617,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3334:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          },
                          "value": "3"
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "3327:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                          "typeString": "uint64[3]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 627,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 621,
                        "name": "versions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 480,
                        "src": "3369:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$476_storage_$",
                          "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                        }
                      },
                      "id": 625,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 622,
                          "name": "majorToLatestVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 484,
                          "src": "3378:20:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                            "typeString": "mapping(uint64 => bytes32)"
                          }
                        },
                        "id": 624,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 623,
                          "name": "major",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 588,
                          "src": "3399:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3378:27:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3369:37:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$476_storage",
                        "typeString": "struct Package.Version storage ref"
                      }
                    },
                    "id": 626,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "semanticVersion",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 471,
                    "src": "3369:53:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage",
                      "typeString": "uint64[3] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3327:95:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 637,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 629,
                            "name": "latestVersionForMajor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 620,
                            "src": "3454:21:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                              "typeString": "uint64[3] storage pointer"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                              "typeString": "uint64[3] storage pointer"
                            }
                          ],
                          "id": 628,
                          "name": "semanticVersionIsZero",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 792,
                          "src": "3432:21:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (uint64[3] memory) pure returns (bool)"
                          }
                        },
                        "id": 630,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3432:44:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 635,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 631,
                              "name": "minor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 605,
                              "src": "3524:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 632,
                                "name": "latestVersionForMajor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 620,
                                "src": "3532:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                                  "typeString": "uint64[3] storage pointer"
                                }
                              },
                              "id": 634,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 633,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3554:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3532:24:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "3524:32:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          }
                        ],
                        "id": 636,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "3523:34:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "3432:125:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 642,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 638,
                              "name": "minor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 605,
                              "src": "3601:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 639,
                                "name": "latestVersionForMajor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 620,
                                "src": "3610:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                                  "typeString": "uint64[3] storage pointer"
                                }
                              },
                              "id": 641,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 640,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3632:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3610:24:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "3601:33:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 647,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 643,
                              "name": "patch",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 611,
                              "src": "3638:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 644,
                                "name": "latestVersionForMajor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 620,
                                "src": "3646:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                                  "typeString": "uint64[3] storage pointer"
                                }
                              },
                              "id": 646,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "32",
                                "id": 645,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3668:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3646:24:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "3638:32:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "3601:69:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 649,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3600:71:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3432:239:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 658,
                  "nodeType": "IfStatement",
                  "src": "3428:339:4",
                  "trueBody": {
                    "id": 657,
                    "nodeType": "Block",
                    "src": "3712:55:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 651,
                              "name": "majorToLatestVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 484,
                              "src": "3721:20:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                                "typeString": "mapping(uint64 => bytes32)"
                              }
                            },
                            "id": 653,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 652,
                              "name": "major",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 588,
                              "src": "3742:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3721:27:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 654,
                            "name": "versionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 572,
                            "src": "3751:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3721:39:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 656,
                        "nodeType": "ExpressionStatement",
                        "src": "3721:39:4"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 660,
                        "name": "semanticVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 537,
                        "src": "3791:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 661,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 539,
                        "src": "3808:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 662,
                        "name": "contentURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 541,
                        "src": "3825:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 659,
                      "name": "VersionAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 467,
                      "src": "3778:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_array$_t_uint64_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint64[3] memory,address,bytes memory)"
                      }
                    },
                    "id": 663,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3778:58:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 664,
                  "nodeType": "EmitStatement",
                  "src": "3773:63:4"
                }
              ]
            },
            "documentation": "@dev Adds a new version to the package. Only the Owner can add new versions.\nReverts if the specified semver identifier already exists. \nEmits a `VersionAdded` event if successful.\n@param semanticVersion Semver identifier of the version.\n@param contractAddress Contract address for the version, must be non-zero.\n@param contentURI Optional content URI for the version.",
            "id": 666,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 544,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 543,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5427,
                  "src": "2621:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2621:9:4"
              }
            ],
            "name": "addVersion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 542,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 537,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 666,
                  "src": "2530:32:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 534,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "2530:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 536,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2537:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2530:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 539,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 666,
                  "src": "2564:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 538,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2564:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 541,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 666,
                  "src": "2589:23:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 540,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2589:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2529:84:4"
            },
            "returnParameters": {
              "id": 545,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2631:0:4"
            },
            "scope": 793,
            "src": "2510:1331:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 692,
              "nodeType": "Block",
              "src": "4143:142:4",
              "statements": [
                {
                  "assignments": [
                    676
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 676,
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "scope": 692,
                      "src": "4149:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 675,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 476,
                        "src": "4149:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 682,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 677,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 480,
                      "src": "4175:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$476_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 681,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 679,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 670,
                          "src": "4204:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        ],
                        "id": 678,
                        "name": "semanticVersionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 764,
                        "src": "4184:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 680,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4184:36:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4175:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$476_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4149:72:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 684,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 676,
                            "src": "4242:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                              "typeString": "struct Package.Version storage pointer"
                            }
                          },
                          "id": 685,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "contractAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 473,
                          "src": "4242:23:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4234:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 686,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4234:32:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4278:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 687,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4270:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 689,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4270:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "4234:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 674,
                  "id": 691,
                  "nodeType": "Return",
                  "src": "4227:53:4"
                }
              ]
            },
            "documentation": "@dev Checks whether a version is present in the package.\n@param semanticVersion Semver identifier of the version.\n@return true if the version is registered in this package, false otherwise.",
            "id": 693,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hasVersion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 671,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 670,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 693,
                  "src": "4082:32:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 667,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "4082:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 669,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 668,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4089:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "4082:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4081:34:4"
            },
            "returnParameters": {
              "id": 674,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 673,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 693,
                  "src": "4137:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 672,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4137:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4136:6:4"
            },
            "scope": 793,
            "src": "4062:223:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 708,
              "nodeType": "Block",
              "src": "4823:47:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 705,
                        "name": "latestMajor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 486,
                        "src": "4853:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 704,
                      "name": "getLatestByMajor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 739,
                      "src": "4836:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint64_$returns$_t_array$_t_uint64_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint64) view returns (uint64[3] memory,address,bytes memory)"
                      }
                    },
                    "id": 706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4836:29:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_array$_t_uint64_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(uint64[3] memory,address,bytes memory)"
                    }
                  },
                  "functionReturnParameters": 703,
                  "id": 707,
                  "nodeType": "Return",
                  "src": "4829:36:4"
                }
              ]
            },
            "documentation": "@dev Returns the version with the highest semver identifier registered in the package.\nFor instance, if `1.2.0`, `1.3.0`, and `2.0.0` are present, will always return `2.0.0`, regardless \nof the order in which they were registered. Returns zero if no versions are registered.\n@return Semver identifier, contract address, and content URI for the version, or zero if not exists.",
            "id": 709,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLatest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 694,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4715:2:4"
            },
            "returnParameters": {
              "id": 703,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 698,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 709,
                  "src": "4739:32:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 695,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "4739:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 697,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 696,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4746:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "4739:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 700,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 709,
                  "src": "4773:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 699,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4773:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 702,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 709,
                  "src": "4798:23:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 701,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4798:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4738:84:4"
            },
            "scope": 793,
            "src": "4697:173:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 738,
              "nodeType": "Block",
              "src": "5501:158:4",
              "statements": [
                {
                  "assignments": [
                    723
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 723,
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "scope": 738,
                      "src": "5507:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 722,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 476,
                        "src": "5507:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 729,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 724,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 480,
                      "src": "5533:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$476_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 728,
                    "indexExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 725,
                        "name": "majorToLatestVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 484,
                        "src": "5542:20:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                          "typeString": "mapping(uint64 => bytes32)"
                        }
                      },
                      "id": 727,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 726,
                        "name": "major",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 711,
                        "src": "5563:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "5542:27:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5533:37:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$476_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5507:63:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 730,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 723,
                          "src": "5584:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 731,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "semanticVersion",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 471,
                        "src": "5584:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_storage",
                          "typeString": "uint64[3] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 732,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 723,
                          "src": "5609:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 733,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contractAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 473,
                        "src": "5609:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 734,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 723,
                          "src": "5634:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$476_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 735,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contentURI",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 475,
                        "src": "5634:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "id": 736,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "5583:70:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_array$_t_uint64_$3_storage_$_t_address_$_t_bytes_storage_$",
                      "typeString": "tuple(uint64[3] storage ref,address,bytes storage ref)"
                    }
                  },
                  "functionReturnParameters": 721,
                  "id": 737,
                  "nodeType": "Return",
                  "src": "5576:77:4"
                }
              ]
            },
            "documentation": "@dev Returns the version with the highest semver identifier for the given major.\nFor instance, if `1.2.0`, `1.3.0`, and `2.0.0` are present, will return `1.3.0` for major `1`, \nregardless of the order in which they were registered. Returns zero if no versions are registered\nfor the specified major.\n@param major Major identifier to query\n@return Semver identifier, contract address, and content URI for the version, or zero if not exists.",
            "id": 739,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLatestByMajor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 712,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 711,
                  "name": "major",
                  "nodeType": "VariableDeclaration",
                  "scope": 739,
                  "src": "5382:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 710,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5382:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5381:14:4"
            },
            "returnParameters": {
              "id": 721,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 716,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 739,
                  "src": "5417:32:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 713,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "5417:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 715,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 714,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5424:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5417:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 718,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 739,
                  "src": "5451:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 717,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5451:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 720,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 739,
                  "src": "5476:23:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 719,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5476:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5416:84:4"
            },
            "scope": 793,
            "src": "5356:303:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 763,
              "nodeType": "Block",
              "src": "5750:81:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 751,
                              "name": "version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 743,
                              "src": "5790:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 753,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 752,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5798:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5790:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 754,
                              "name": "version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 743,
                              "src": "5802:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 756,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 755,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5810:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5802:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 757,
                              "name": "version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 743,
                              "src": "5814:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 759,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 758,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5822:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5814:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 749,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6450,
                            "src": "5773:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 750,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5773:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5773:52:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 748,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6457,
                      "src": "5763:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 761,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5763:63:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 747,
                  "id": 762,
                  "nodeType": "Return",
                  "src": "5756:70:4"
                }
              ]
            },
            "documentation": null,
            "id": 764,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "semanticVersionHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 744,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 743,
                  "name": "version",
                  "nodeType": "VariableDeclaration",
                  "scope": 764,
                  "src": "5692:24:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 740,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "5692:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 742,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 741,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5699:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5692:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5691:26:4"
            },
            "returnParameters": {
              "id": 747,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 746,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 764,
                  "src": "5741:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 745,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5741:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5740:9:4"
            },
            "scope": 793,
            "src": "5663:168:4",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 791,
              "nodeType": "Block",
              "src": "5921:71:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 783,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 777,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 773,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 768,
                            "src": "5934:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                              "typeString": "uint64[3] memory"
                            }
                          },
                          "id": 775,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 774,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5942:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5934:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 776,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5948:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5934:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 778,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 768,
                            "src": "5953:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                              "typeString": "uint64[3] memory"
                            }
                          },
                          "id": 780,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 779,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5961:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5953:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5967:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5953:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "5934:34:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 788,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 784,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 768,
                          "src": "5972:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        },
                        "id": 786,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "32",
                          "id": 785,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5980:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_2_by_1",
                            "typeString": "int_const 2"
                          },
                          "value": "2"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5972:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 787,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5986:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5972:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5934:53:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 772,
                  "id": 790,
                  "nodeType": "Return",
                  "src": "5927:60:4"
                }
              ]
            },
            "documentation": null,
            "id": 792,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "semanticVersionIsZero",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 769,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 768,
                  "name": "version",
                  "nodeType": "VariableDeclaration",
                  "scope": 792,
                  "src": "5866:24:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 765,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "5866:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 767,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 766,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5873:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5866:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5865:26:4"
            },
            "returnParameters": {
              "id": 772,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 771,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 792,
                  "src": "5915:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 770,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5915:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5914:6:4"
            },
            "scope": 793,
            "src": "5835:157:4",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 794,
        "src": "424:5570:4"
      }
    ],
    "src": "0:5995:4"
  },
  "bytecode": "0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36115cf806100cf6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063c356d5b011610066578063c356d5b01461023b578063c36af4601461034e578063d6ef25d514610433578063e30329e91461054f578063f2fde38b146106605761009e565b80631df40eaa146100a357806335ce401614610148578063715018a6146101c55780638da5cb5b146101cf5780638f32d59b14610219575b600080fd5b610106600480360360608110156100b957600080fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f82011690508083019250505050505091929192905050506106a4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101ab6004803603606081101561015e57600080fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f82011690508083019250505050505091929192905050506106f1565b604051808215151515815260200191505060405180910390f35b6101cd61076e565b005b6101d7610840565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610221610869565b604051808215151515815260200191505060405180910390f35b6102716004803603602081101561025157600080fd5b81019080803567ffffffffffffffff1690602001909291905050506108c0565b6040518084600360200280838360005b8381101561029c578082015181840152602081019050610281565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103115780820151818401526020810190506102f6565b50505050905090810190601f16801561033e5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610356610a54565b6040518084600360200280838360005b83811015610381578082015181840152602081019050610366565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103f65780820151818401526020810190506103db565b50505050905090810190601f1680156104235780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b61054d600480360360a081101561044957600080fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f8201169050808301925050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104c757600080fd5b8201836020820111156104d957600080fd5b803590602001918460018302840111640100000000831117156104fb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610a8a565b005b6105b26004803603606081101561056557600080fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f8201169050808301925050505050509192919290505050611084565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610624578082015181840152602081019050610609565b50505050905090810190601f1680156106515780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6106a26004803603602081101561067657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611176565b005b600080600160006106b485611195565b815260200190815260200160002090508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6000806001600061070185611195565b81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415915050919050565b610776610869565b151561078157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6108c86113c8565b60006060600060016000600260008867ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000205481526020019081526020016000209050806000018160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600201826003806020026040519081016040528092919082600380156109a3576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff168152602001906008019060208260070104928301926001038202915080841161095e5790505b50505050509250808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a3f5780601f10610a1457610100808354040283529160200191610a3f565b820191906000526020600020905b815481529060010190602001808311610a2257829003601f168201915b50505050509050935093509350509193909250565b610a5c6113c8565b60006060610a7f600360009054906101000a900467ffffffffffffffff166108c0565b925092509250909192565b610a92610869565b1515610a9d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610b42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6e747261637420616464726573732069732072657175697265640000000081525060200191505060405180910390fd5b610b4b836106f1565b151515610ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180611576602e913960400191505060405180910390fd5b610bac83611253565b151515610c21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f56657273696f6e206d757374206265206e6f6e207a65726f000000000000000081525060200191505060405180910390fd5b6000610c2c84611195565b90506060604051908101604052808581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381525060016000838152602001908152602001600020600082015181600001906003610c8a9291906113eb565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610cee929190611499565b509050506000846000600381101515610d0357fe5b60200201519050600360009054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff161115610d7957846000600381101515610d4b57fe5b6020020151600360006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b6000856001600381101515610d8a57fe5b602002015190506000866002600381101515610da257fe5b60200201519050600060016000600260008767ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000205481526020019081526020016000206000019050610e6381600380602002604051908101604052809291908260038015610e59576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff1681526020019060080190602082600701049283019260010382029150808411610e145790505b5050505050611253565b80610eaf5750806001600381101515610e7857fe5b600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff168367ffffffffffffffff16115b80610f485750806001600381101515610ec457fe5b600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff168367ffffffffffffffff16148015610f475750806002600381101515610f1057fe5b600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff168267ffffffffffffffff16115b5b15610f7a5784600260008667ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020819055505b7fc5b9b96b4952fc60f5a916010c882de0324dd4fdfaa999f9ad6947f55d8427628888886040518084600360200280838360005b83811015610fc9578082015181840152602081019050610fae565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103e578082015181840152602081019050611023565b50505050905090810190601f16801561106b5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15050505050505050565b6000606060006001600061109786611195565b815260200190815260200160002090508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600201808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111655780601f1061113a57610100808354040283529160200191611165565b820191906000526020600020905b81548152906001019060200180831161114857829003601f168201915b505050505090509250925050915091565b61117e610869565b151561118957600080fd5b611192816112ce565b50565b60008160006003811015156111a657fe5b60200201518260016003811015156111ba57fe5b60200201518360026003811015156111ce57fe5b6020020151604051602001808467ffffffffffffffff1667ffffffffffffffff1660c01b81526008018367ffffffffffffffff1667ffffffffffffffff1660c01b81526008018267ffffffffffffffff1667ffffffffffffffff1660c01b81526008019350505050604051602081830303815290604052805190602001209050919050565b60008082600060038110151561126557fe5b602002015167ffffffffffffffff1614801561129e5750600082600160038110151561128d57fe5b602002015167ffffffffffffffff16145b80156112c7575060008260026003811015156112b657fe5b602002015167ffffffffffffffff16145b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561130a57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060405190810160405280600390602082028038833980820191505090505090565b82600380016004900481019282156114885791602002820160005b8382111561145257835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509260200192600801602081600701049283019260010302611406565b80156114865782816101000a81549067ffffffffffffffff0219169055600801602081600701049283019260010302611452565b505b5090506114959190611519565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106114da57805160ff1916838001178555611508565b82800160010185558215611508579182015b828111156115075782518255916020019190600101906114ec565b5b5090506115159190611550565b5090565b61154d91905b8082111561154957600081816101000a81549067ffffffffffffffff02191690555060010161151f565b5090565b90565b61157291905b8082111561156e576000816000905550600101611556565b5090565b9056fe476976656e2076657273696f6e20697320616c7265616479207265676973746572656420696e207061636b616765a165627a7a72305820cd8722dd1407f3e639d2ce167174ae0c75cff127460523bb031a9d0f640e8ded0029",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063c356d5b011610066578063c356d5b01461023b578063c36af4601461034e578063d6ef25d514610433578063e30329e91461054f578063f2fde38b146106605761009e565b80631df40eaa146100a357806335ce401614610148578063715018a6146101c55780638da5cb5b146101cf5780638f32d59b14610219575b600080fd5b610106600480360360608110156100b957600080fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f82011690508083019250505050505091929192905050506106a4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101ab6004803603606081101561015e57600080fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f82011690508083019250505050505091929192905050506106f1565b604051808215151515815260200191505060405180910390f35b6101cd61076e565b005b6101d7610840565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610221610869565b604051808215151515815260200191505060405180910390f35b6102716004803603602081101561025157600080fd5b81019080803567ffffffffffffffff1690602001909291905050506108c0565b6040518084600360200280838360005b8381101561029c578082015181840152602081019050610281565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103115780820151818401526020810190506102f6565b50505050905090810190601f16801561033e5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610356610a54565b6040518084600360200280838360005b83811015610381578082015181840152602081019050610366565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103f65780820151818401526020810190506103db565b50505050905090810190601f1680156104235780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b61054d600480360360a081101561044957600080fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f8201169050808301925050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104c757600080fd5b8201836020820111156104d957600080fd5b803590602001918460018302840111640100000000831117156104fb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610a8a565b005b6105b26004803603606081101561056557600080fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f8201169050808301925050505050509192919290505050611084565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610624578082015181840152602081019050610609565b50505050905090810190601f1680156106515780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6106a26004803603602081101561067657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611176565b005b600080600160006106b485611195565b815260200190815260200160002090508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6000806001600061070185611195565b81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415915050919050565b610776610869565b151561078157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6108c86113c8565b60006060600060016000600260008867ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000205481526020019081526020016000209050806000018160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600201826003806020026040519081016040528092919082600380156109a3576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff168152602001906008019060208260070104928301926001038202915080841161095e5790505b50505050509250808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a3f5780601f10610a1457610100808354040283529160200191610a3f565b820191906000526020600020905b815481529060010190602001808311610a2257829003601f168201915b50505050509050935093509350509193909250565b610a5c6113c8565b60006060610a7f600360009054906101000a900467ffffffffffffffff166108c0565b925092509250909192565b610a92610869565b1515610a9d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610b42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6e747261637420616464726573732069732072657175697265640000000081525060200191505060405180910390fd5b610b4b836106f1565b151515610ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180611576602e913960400191505060405180910390fd5b610bac83611253565b151515610c21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f56657273696f6e206d757374206265206e6f6e207a65726f000000000000000081525060200191505060405180910390fd5b6000610c2c84611195565b90506060604051908101604052808581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381525060016000838152602001908152602001600020600082015181600001906003610c8a9291906113eb565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610cee929190611499565b509050506000846000600381101515610d0357fe5b60200201519050600360009054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff161115610d7957846000600381101515610d4b57fe5b6020020151600360006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b6000856001600381101515610d8a57fe5b602002015190506000866002600381101515610da257fe5b60200201519050600060016000600260008767ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000205481526020019081526020016000206000019050610e6381600380602002604051908101604052809291908260038015610e59576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff1681526020019060080190602082600701049283019260010382029150808411610e145790505b5050505050611253565b80610eaf5750806001600381101515610e7857fe5b600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff168367ffffffffffffffff16115b80610f485750806001600381101515610ec457fe5b600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff168367ffffffffffffffff16148015610f475750806002600381101515610f1057fe5b600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff168267ffffffffffffffff16115b5b15610f7a5784600260008667ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020819055505b7fc5b9b96b4952fc60f5a916010c882de0324dd4fdfaa999f9ad6947f55d8427628888886040518084600360200280838360005b83811015610fc9578082015181840152602081019050610fae565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103e578082015181840152602081019050611023565b50505050905090810190601f16801561106b5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15050505050505050565b6000606060006001600061109786611195565b815260200190815260200160002090508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600201808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111655780601f1061113a57610100808354040283529160200191611165565b820191906000526020600020905b81548152906001019060200180831161114857829003601f168201915b505050505090509250925050915091565b61117e610869565b151561118957600080fd5b611192816112ce565b50565b60008160006003811015156111a657fe5b60200201518260016003811015156111ba57fe5b60200201518360026003811015156111ce57fe5b6020020151604051602001808467ffffffffffffffff1667ffffffffffffffff1660c01b81526008018367ffffffffffffffff1667ffffffffffffffff1660c01b81526008018267ffffffffffffffff1667ffffffffffffffff1660c01b81526008019350505050604051602081830303815290604052805190602001209050919050565b60008082600060038110151561126557fe5b602002015167ffffffffffffffff1614801561129e5750600082600160038110151561128d57fe5b602002015167ffffffffffffffff16145b80156112c7575060008260026003811015156112b657fe5b602002015167ffffffffffffffff16145b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561130a57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060405190810160405280600390602082028038833980820191505090505090565b82600380016004900481019282156114885791602002820160005b8382111561145257835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509260200192600801602081600701049283019260010302611406565b80156114865782816101000a81549067ffffffffffffffff0219169055600801602081600701049283019260010302611452565b505b5090506114959190611519565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106114da57805160ff1916838001178555611508565b82800160010185558215611508579182015b828111156115075782518255916020019190600101906114ec565b5b5090506115159190611550565b5090565b61154d91905b8082111561154957600081816101000a81549067ffffffffffffffff02191690555060010161151f565b5090565b90565b61157291905b8082111561156e576000816000905550600101611556565b5090565b9056fe476976656e2076657273696f6e20697320616c7265616479207265676973746572656420696e207061636b616765a165627a7a72305820cd8722dd1407f3e639d2ce167174ae0c75cff127460523bb031a9d0f640e8ded0029",
  "compiler": {
    "name": "solc",
    "version": "0.5.3+commit.10d17f24.Emscripten.clang",
    "optimizer": {},
    "evmVersion": "constantinople"
  }
}
