{
  "contractName": "Root",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract ENS",
          "name": "_ens",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "controller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "enabled",
          "type": "bool"
        }
      ],
      "name": "ControllerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "label",
          "type": "bytes32"
        }
      ],
      "name": "TLDLocked",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "controllers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ens",
      "outputs": [
        {
          "internalType": "contract ENS",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "locked",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "controller",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "enabled",
          "type": "bool"
        }
      ],
      "name": "setController",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "label",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "setSubnodeOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "resolver",
          "type": "address"
        }
      ],
      "name": "setResolver",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "label",
          "type": "bytes32"
        }
      ],
      "name": "lock",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceID",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ENS\",\"name\":\"_ens\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"label\",\"type\":\"bytes32\"}],\"name\":\"TLDLocked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"controllers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ens\",\"outputs\":[{\"internalType\":\"contract ENS\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"label\",\"type\":\"bytes32\"}],\"name\":\"lock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"locked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"setResolver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"label\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setSubnodeOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@ensdomains/root/contracts/Root.sol\":\"Root\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@ensdomains/ens/contracts/ENS.sol\":{\"keccak256\":\"0x376a1ab7c43ac7c922a5b7e39c7fcba8bc66409fb335ebcee2f8f45d485b1f31\",\"urls\":[\"bzz-raw://766025ff22caa14c68bb5341b843616f3da8b739924475f7dc4383b0482138fe\",\"dweb:/ipfs/QmWzCxvb6WnF9qHHX4np7f6QePXMqX59SDMuRu8vogYKAV\"]},\"@ensdomains/root/contracts/Controllable.sol\":{\"keccak256\":\"0xde18e4c3e12b45f8de33790e6a42e5597ae559aeafb2aafbfb04c089683f2a9e\",\"urls\":[\"bzz-raw://951e2cf27f912eb4e61b9fff6b2f022a6a0bef5f53b01fd28ed91767d92063d7\",\"dweb:/ipfs/QmR2qd6hWEb5a6midcAStQFgPdqAG5ffGLitpTiaXYsZhp\"]},\"@ensdomains/root/contracts/Ownable.sol\":{\"keccak256\":\"0x251dc24ffd5b4187051ee7114230ffa9fc1ee66451cdd5c12fbe4d2369e006ec\",\"urls\":[\"bzz-raw://4a80ed2713bf6cc1b9bc047588770fae0d516e2079faaa70cbbb77673222f38e\",\"dweb:/ipfs/Qmepae9HDVfGbvMpumnEcxMeWQiKU1bKobbR784UrbbVo1\"]},\"@ensdomains/root/contracts/Root.sol\":{\"keccak256\":\"0x7a74f007b0dfabd449a93979b81e59570447ee380a55253b3a0cd340bfb2c75d\",\"urls\":[\"bzz-raw://223dac61eb046cf73315c6beec63f95bf1ba584f9081d56181808fc84c4e5337\",\"dweb:/ipfs/QmTbKg1MXrNbAQTfnRFsoKGc7YWzTkaVP9n2M6kGymcRfj\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50604051610a38380380610a388339818101604052602081101561003357600080fd5b8101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610963806100d56000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80638cb8ecec116100715780638cb8ecec146102115780638da5cb5b1461025f578063cbe9e76414610293578063da8c229e146102d7578063e0dba60f14610331578063f2fde38b14610381576100a9565b806301670ba9146100ae57806301ffc9a7146100dc5780632f54bf6e1461013f5780633f15457f146101995780634e543b26146101cd575b600080fd5b6100da600480360360208110156100c457600080fd5b81019080803590602001909291905050506103c5565b005b610127600480360360208110156100f257600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610433565b60405180821515815260200191505060405180910390f35b6101816004803603602081101561015557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061049d565b60405180821515815260200191505060405180910390f35b6101a16104f5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61020f600480360360208110156101e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061051b565b005b61025d6004803603604081101561022757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105de565b005b61026761073d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102bf600480360360208110156102a957600080fd5b8101908080359060200190929190505050610761565b60405180821515815260200191505060405180910390f35b610319600480360360208110156102ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610781565b60405180821515815260200191505060405180910390f35b61037f6004803603604081101561034757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506107a1565b005b6103c36004803603602081101561039757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061085e565b005b6103ce3361049d565b6103d757600080fd5b807f1764176cfa565853ba1ded547a830a9f9bff95231ef6fd228b3ddd617577756960405160405180910390a260016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e27bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105243361049d565b61052d57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a6000801b836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b1580156105c357600080fd5b505af11580156105d7573d6000803e3d6000fd5b5050505050565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661063457600080fd5b6003600083815260200190815260200160002060009054906101000a900460ff161561065f57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59236000801b84846040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1580156106fd57600080fd5b505af1158015610711573d6000803e3d6000fd5b505050506040513d602081101561072757600080fd5b8101908080519060200190929190505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915054906101000a900460ff1681565b6107aa3361049d565b6107b357600080fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf878260405180821515815260200191505060405180910390a25050565b6108673361049d565b61087057600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fea264697066735822122088a6a6fff072e18e1023277d31634d9cd98459d1b48a7c29d180687abff0e1b764736f6c63430007040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80638cb8ecec116100715780638cb8ecec146102115780638da5cb5b1461025f578063cbe9e76414610293578063da8c229e146102d7578063e0dba60f14610331578063f2fde38b14610381576100a9565b806301670ba9146100ae57806301ffc9a7146100dc5780632f54bf6e1461013f5780633f15457f146101995780634e543b26146101cd575b600080fd5b6100da600480360360208110156100c457600080fd5b81019080803590602001909291905050506103c5565b005b610127600480360360208110156100f257600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610433565b60405180821515815260200191505060405180910390f35b6101816004803603602081101561015557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061049d565b60405180821515815260200191505060405180910390f35b6101a16104f5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61020f600480360360208110156101e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061051b565b005b61025d6004803603604081101561022757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105de565b005b61026761073d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102bf600480360360208110156102a957600080fd5b8101908080359060200190929190505050610761565b60405180821515815260200191505060405180910390f35b610319600480360360208110156102ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610781565b60405180821515815260200191505060405180910390f35b61037f6004803603604081101561034757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506107a1565b005b6103c36004803603602081101561039757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061085e565b005b6103ce3361049d565b6103d757600080fd5b807f1764176cfa565853ba1ded547a830a9f9bff95231ef6fd228b3ddd617577756960405160405180910390a260016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e27bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105243361049d565b61052d57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a6000801b836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b1580156105c357600080fd5b505af11580156105d7573d6000803e3d6000fd5b5050505050565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661063457600080fd5b6003600083815260200190815260200160002060009054906101000a900460ff161561065f57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59236000801b84846040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1580156106fd57600080fd5b505af1158015610711573d6000803e3d6000fd5b505050506040513d602081101561072757600080fd5b8101908080519060200190929190505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915054906101000a900460ff1681565b6107aa3361049d565b6107b357600080fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf878260405180821515815260200191505060405180910390a25050565b6108673361049d565b61087057600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fea264697066735822122088a6a6fff072e18e1023277d31634d9cd98459d1b48a7c29d180687abff0e1b764736f6c63430007040033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "123:918:14:-:0;;;427:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;286:10:13;278:5;;:18;;;;;;;;;;;;;;;;;;472:4:14;466:3;;:10;;;;;;;;;;;;;;;;;;427:56;123:918;;;;;;",
  "deployedSourceMap": "123:918:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;785:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;907:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;462:95:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;364:14:14;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;668:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;489:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49:20:13;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;384:36:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;89:41:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;299:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;309:147:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;785:116:14;203:19:13;211:10;203:7;:19::i;:::-;195:28;;;;;;858:5:14::1;848:16;;;;;;;;;;890:4;874:6;:13;881:5;874:13;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;785:116:::0;:::o;907:132::-;977:4;273:38;1000:32;;;:11;:32;;;;993:39;;907:132;;;:::o;462:95:13:-;514:4;546;537:13;;:5;;;;;;;;;;:13;;;530:20;;462:95;;;:::o;364:14:14:-;;;;;;;;;;;;;:::o;668:111::-;203:19:13;211:10;203:7;:19::i;:::-;195:28;;;;;;736:3:14::1;;;;;;;;;;;:15;;;213:1;205:10:::0;::::1;763:8;736:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;668:111:::0;:::o;489:173::-;251:11:12;:23;263:10;251:23;;;;;;;;;;;;;;;;;;;;;;;;;243:32;;;;;;587:6:14::1;:13;594:5;587:13;;;;;;;;;;;;;;;;;;;;;586:14;578:23;;;::::0;::::1;;611:3;;;;;;;;;;;:19;;;213:1;205:10:::0;::::1;642:5;649;611:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;489:173:::0;;:::o;49:20:13:-;;;;;;;;;;;;:::o;384:36:14:-;;;;;;;;;;;;;;;;;;;;;;:::o;89:41:12:-;;;;;;;;;;;;;;;;;;;;;;:::o;299:177::-;203:19:13;211:10;203:7;:19::i;:::-;195:28;;;;;;409:7:12::1;383:11;:23;395:10;383:23;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;449:10;431:38;;;461:7;431:38;;;;;;;;;;;;;;;;;;;;299:177:::0;;:::o;309:147:13:-;203:19;211:10;203:7;:19::i;:::-;195:28;;;;;;414:8:::1;386:37;;407:5;::::0;::::1;;;;;;;;386:37;;;;;;;;;;;;441:8;433:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;309:147:::0;:::o",
  "source": "pragma solidity ^0.7.0;\n\nimport \"@ensdomains/ens/contracts/ENS.sol\";\nimport \"./Ownable.sol\";\nimport \"./Controllable.sol\";\n\ncontract Root is Ownable, Controllable {\n    bytes32 constant private ROOT_NODE = bytes32(0);\n\n    bytes4 constant private INTERFACE_META_ID = bytes4(keccak256(\"supportsInterface(bytes4)\"));\n\n    event TLDLocked(bytes32 indexed label);\n\n    ENS public ens;\n    mapping(bytes32=>bool) public locked;\n\n    constructor(ENS _ens) public {\n        ens = _ens;\n    }\n\n    function setSubnodeOwner(bytes32 label, address owner) external onlyController {\n        require(!locked[label]);\n        ens.setSubnodeOwner(ROOT_NODE, label, owner);\n    }\n\n    function setResolver(address resolver) external onlyOwner {\n        ens.setResolver(ROOT_NODE, resolver);\n    }\n\n    function lock(bytes32 label) external onlyOwner {\n        emit TLDLocked(label);\n        locked[label] = true;\n    }\n\n    function supportsInterface(bytes4 interfaceID) external pure returns (bool) {\n        return interfaceID == INTERFACE_META_ID;\n    }\n}\n",
  "sourcePath": "@ensdomains/root/contracts/Root.sol",
  "ast": {
    "absolutePath": "@ensdomains/root/contracts/Root.sol",
    "exportedSymbols": {
      "Controllable": [
        4004
      ],
      "ENS": [
        3533
      ],
      "Ownable": [
        4064
      ],
      "Root": [
        4178
      ]
    },
    "id": 4179,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4066,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:14"
      },
      {
        "absolutePath": "@ensdomains/ens/contracts/ENS.sol",
        "file": "@ensdomains/ens/contracts/ENS.sol",
        "id": 4067,
        "nodeType": "ImportDirective",
        "scope": 4179,
        "sourceUnit": 3534,
        "src": "25:43:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/root/contracts/Ownable.sol",
        "file": "./Ownable.sol",
        "id": 4068,
        "nodeType": "ImportDirective",
        "scope": 4179,
        "sourceUnit": 4065,
        "src": "69:23:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/root/contracts/Controllable.sol",
        "file": "./Controllable.sol",
        "id": 4069,
        "nodeType": "ImportDirective",
        "scope": 4179,
        "sourceUnit": 4005,
        "src": "93:28:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 4070,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4064,
              "src": "140:7:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$4064",
                "typeString": "contract Ownable"
              }
            },
            "id": 4071,
            "nodeType": "InheritanceSpecifier",
            "src": "140:7:14"
          },
          {
            "baseName": {
              "id": 4072,
              "name": "Controllable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4004,
              "src": "149:12:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Controllable_$4004",
                "typeString": "contract Controllable"
              }
            },
            "id": 4073,
            "nodeType": "InheritanceSpecifier",
            "src": "149:12:14"
          }
        ],
        "contractDependencies": [
          4004,
          4064
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 4178,
        "linearizedBaseContracts": [
          4178,
          4004,
          4064
        ],
        "name": "Root",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 4079,
            "mutability": "constant",
            "name": "ROOT_NODE",
            "nodeType": "VariableDeclaration",
            "scope": 4178,
            "src": "168:47:14",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 4074,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "168:7:14",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "30",
                  "id": 4077,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "213:1:14",
                  "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": 4076,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "205:7:14",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes32_$",
                  "typeString": "type(bytes32)"
                },
                "typeName": {
                  "id": 4075,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "205:7:14",
                  "typeDescriptions": {}
                }
              },
              "id": 4078,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "205:10:14",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 4087,
            "mutability": "constant",
            "name": "INTERFACE_META_ID",
            "nodeType": "VariableDeclaration",
            "scope": 4178,
            "src": "222:90:14",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 4080,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "222:6:14",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "arguments": [
                {
                  "arguments": [
                    {
                      "hexValue": "737570706f727473496e746572666163652862797465733429",
                      "id": 4084,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "283:27:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e2",
                        "typeString": "literal_string \"supportsInterface(bytes4)\""
                      },
                      "value": "supportsInterface(bytes4)"
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_stringliteral_01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e2",
                        "typeString": "literal_string \"supportsInterface(bytes4)\""
                      }
                    ],
                    "id": 4083,
                    "name": "keccak256",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": -8,
                    "src": "273:9:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                      "typeString": "function (bytes memory) pure returns (bytes32)"
                    }
                  },
                  "id": 4085,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "functionCall",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "273:38:14",
                  "tryCall": false,
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                ],
                "id": 4082,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "266:6:14",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes4_$",
                  "typeString": "type(bytes4)"
                },
                "typeName": {
                  "id": 4081,
                  "name": "bytes4",
                  "nodeType": "ElementaryTypeName",
                  "src": "266:6:14",
                  "typeDescriptions": {}
                }
              },
              "id": 4086,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "266:46:14",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "visibility": "private"
          },
          {
            "anonymous": false,
            "id": 4091,
            "name": "TLDLocked",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4090,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4089,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "label",
                  "nodeType": "VariableDeclaration",
                  "scope": 4091,
                  "src": "335:21:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4088,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "335:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "334:23:14"
            },
            "src": "319:39:14"
          },
          {
            "constant": false,
            "functionSelector": "3f15457f",
            "id": 4093,
            "mutability": "mutable",
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 4178,
            "src": "364:14:14",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$3533",
              "typeString": "contract ENS"
            },
            "typeName": {
              "id": 4092,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3533,
              "src": "364:3:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$3533",
                "typeString": "contract ENS"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "cbe9e764",
            "id": 4097,
            "mutability": "mutable",
            "name": "locked",
            "nodeType": "VariableDeclaration",
            "scope": 4178,
            "src": "384:36:14",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
              "typeString": "mapping(bytes32 => bool)"
            },
            "typeName": {
              "id": 4096,
              "keyType": {
                "id": 4094,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "392:7:14",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "384:22:14",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                "typeString": "mapping(bytes32 => bool)"
              },
              "valueType": {
                "id": 4095,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "401:4:14",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 4106,
              "nodeType": "Block",
              "src": "456:27:14",
              "statements": [
                {
                  "expression": {
                    "id": 4104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4102,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4093,
                      "src": "466:3:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$3533",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4103,
                      "name": "_ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4099,
                      "src": "472:4:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$3533",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "466:10:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$3533",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 4105,
                  "nodeType": "ExpressionStatement",
                  "src": "466:10:14"
                }
              ]
            },
            "id": 4107,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4100,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4099,
                  "mutability": "mutable",
                  "name": "_ens",
                  "nodeType": "VariableDeclaration",
                  "scope": 4107,
                  "src": "439:8:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$3533",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "id": 4098,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3533,
                    "src": "439:3:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$3533",
                      "typeString": "contract ENS"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "438:10:14"
            },
            "returnParameters": {
              "id": 4101,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "456:0:14"
            },
            "scope": 4178,
            "src": "427:56:14",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4131,
              "nodeType": "Block",
              "src": "568:94:14",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4120,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "586:14:14",
                        "subExpression": {
                          "baseExpression": {
                            "id": 4117,
                            "name": "locked",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4097,
                            "src": "587:6:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                              "typeString": "mapping(bytes32 => bool)"
                            }
                          },
                          "id": 4119,
                          "indexExpression": {
                            "id": 4118,
                            "name": "label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4109,
                            "src": "594:5:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "587:13:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4116,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "578:7:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "578:23:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4122,
                  "nodeType": "ExpressionStatement",
                  "src": "578:23:14"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4126,
                        "name": "ROOT_NODE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4079,
                        "src": "631:9:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 4127,
                        "name": "label",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4109,
                        "src": "642:5:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 4128,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4111,
                        "src": "649:5:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 4123,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4093,
                        "src": "611:3:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$3533",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 4125,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setSubnodeOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3467,
                      "src": "611:19:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (bytes32,bytes32,address) external returns (bytes32)"
                      }
                    },
                    "id": 4129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "611:44:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 4130,
                  "nodeType": "ExpressionStatement",
                  "src": "611:44:14"
                }
              ]
            },
            "functionSelector": "8cb8ecec",
            "id": 4132,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 4114,
                "modifierName": {
                  "id": 4113,
                  "name": "onlyController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3982,
                  "src": "553:14:14",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "553:14:14"
              }
            ],
            "name": "setSubnodeOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4109,
                  "mutability": "mutable",
                  "name": "label",
                  "nodeType": "VariableDeclaration",
                  "scope": 4132,
                  "src": "514:13:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4108,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "514:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4111,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 4132,
                  "src": "529:13:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4110,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "529:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "513:30:14"
            },
            "returnParameters": {
              "id": 4115,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "568:0:14"
            },
            "scope": 4178,
            "src": "489:173:14",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4146,
              "nodeType": "Block",
              "src": "726:53:14",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4142,
                        "name": "ROOT_NODE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4079,
                        "src": "752:9:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 4143,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4134,
                        "src": "763:8:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 4139,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4093,
                        "src": "736:3:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$3533",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 4141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setResolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3474,
                      "src": "736:15:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address) external"
                      }
                    },
                    "id": 4144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "736:36:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4145,
                  "nodeType": "ExpressionStatement",
                  "src": "736:36:14"
                }
              ]
            },
            "functionSelector": "4e543b26",
            "id": 4147,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 4137,
                "modifierName": {
                  "id": 4136,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4025,
                  "src": "716:9:14",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "716:9:14"
              }
            ],
            "name": "setResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4135,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4134,
                  "mutability": "mutable",
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4147,
                  "src": "689:16:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4133,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "689:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "688:18:14"
            },
            "returnParameters": {
              "id": 4138,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "726:0:14"
            },
            "scope": 4178,
            "src": "668:111:14",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4164,
              "nodeType": "Block",
              "src": "833:68:14",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 4155,
                        "name": "label",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4149,
                        "src": "858:5:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 4154,
                      "name": "TLDLocked",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4091,
                      "src": "848:9:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 4156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "848:16:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4157,
                  "nodeType": "EmitStatement",
                  "src": "843:21:14"
                },
                {
                  "expression": {
                    "id": 4162,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4158,
                        "name": "locked",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4097,
                        "src": "874:6:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                          "typeString": "mapping(bytes32 => bool)"
                        }
                      },
                      "id": 4160,
                      "indexExpression": {
                        "id": 4159,
                        "name": "label",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4149,
                        "src": "881:5:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "874:13:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 4161,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "890:4:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "874:20:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4163,
                  "nodeType": "ExpressionStatement",
                  "src": "874:20:14"
                }
              ]
            },
            "functionSelector": "01670ba9",
            "id": 4165,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 4152,
                "modifierName": {
                  "id": 4151,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4025,
                  "src": "823:9:14",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "823:9:14"
              }
            ],
            "name": "lock",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4150,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4149,
                  "mutability": "mutable",
                  "name": "label",
                  "nodeType": "VariableDeclaration",
                  "scope": 4165,
                  "src": "799:13:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4148,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "799:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "798:15:14"
            },
            "returnParameters": {
              "id": 4153,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "833:0:14"
            },
            "scope": 4178,
            "src": "785:116:14",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4176,
              "nodeType": "Block",
              "src": "983:56:14",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    },
                    "id": 4174,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4172,
                      "name": "interfaceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4167,
                      "src": "1000:11:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 4173,
                      "name": "INTERFACE_META_ID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4087,
                      "src": "1015:17:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "1000:32:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4171,
                  "id": 4175,
                  "nodeType": "Return",
                  "src": "993:39:14"
                }
              ]
            },
            "functionSelector": "01ffc9a7",
            "id": 4177,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4168,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4167,
                  "mutability": "mutable",
                  "name": "interfaceID",
                  "nodeType": "VariableDeclaration",
                  "scope": 4177,
                  "src": "934:18:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 4166,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "934:6:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "933:20:14"
            },
            "returnParameters": {
              "id": 4171,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4170,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4177,
                  "src": "977:4:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4169,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "977:4:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "976:6:14"
            },
            "scope": 4178,
            "src": "907:132:14",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 4179,
        "src": "123:918:14"
      }
    ],
    "src": "0:1042:14"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "@ensdomains/root/contracts/Root.sol",
      "exportedSymbols": {
        "Controllable": [
          4004
        ],
        "ENS": [
          3533
        ],
        "Ownable": [
          4064
        ],
        "Root": [
          4178
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.7",
            ".0"
          ]
        },
        "id": 4066,
        "name": "PragmaDirective",
        "src": "0:23:14"
      },
      {
        "attributes": {
          "SourceUnit": 3534,
          "absolutePath": "@ensdomains/ens/contracts/ENS.sol",
          "file": "@ensdomains/ens/contracts/ENS.sol",
          "scope": 4179,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4067,
        "name": "ImportDirective",
        "src": "25:43:14"
      },
      {
        "attributes": {
          "SourceUnit": 4065,
          "absolutePath": "@ensdomains/root/contracts/Ownable.sol",
          "file": "./Ownable.sol",
          "scope": 4179,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4068,
        "name": "ImportDirective",
        "src": "69:23:14"
      },
      {
        "attributes": {
          "SourceUnit": 4005,
          "absolutePath": "@ensdomains/root/contracts/Controllable.sol",
          "file": "./Controllable.sol",
          "scope": 4179,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4069,
        "name": "ImportDirective",
        "src": "93:28:14"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            4004,
            4064
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            4178,
            4004,
            4064
          ],
          "name": "Root",
          "scope": 4179
        },
        "children": [
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "Ownable",
                  "referencedDeclaration": 4064,
                  "type": "contract Ownable"
                },
                "id": 4070,
                "name": "UserDefinedTypeName",
                "src": "140:7:14"
              }
            ],
            "id": 4071,
            "name": "InheritanceSpecifier",
            "src": "140:7:14"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "Controllable",
                  "referencedDeclaration": 4004,
                  "type": "contract Controllable"
                },
                "id": 4072,
                "name": "UserDefinedTypeName",
                "src": "149:12:14"
              }
            ],
            "id": 4073,
            "name": "InheritanceSpecifier",
            "src": "149:12:14"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "ROOT_NODE",
              "scope": 4178,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes32",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes32",
                  "type": "bytes32"
                },
                "id": 4074,
                "name": "ElementaryTypeName",
                "src": "168:7:14"
              },
              {
                "attributes": {
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "isStructConstructorCall": false,
                  "lValueRequested": false,
                  "names": [
                    null
                  ],
                  "tryCall": false,
                  "type": "bytes32",
                  "type_conversion": true
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "type": "type(bytes32)"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32"
                        },
                        "id": 4075,
                        "name": "ElementaryTypeName",
                        "src": "205:7:14"
                      }
                    ],
                    "id": 4076,
                    "name": "ElementaryTypeNameExpression",
                    "src": "205:7:14"
                  },
                  {
                    "attributes": {
                      "hexvalue": "30",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "token": "number",
                      "type": "int_const 0",
                      "value": "0"
                    },
                    "id": 4077,
                    "name": "Literal",
                    "src": "213:1:14"
                  }
                ],
                "id": 4078,
                "name": "FunctionCall",
                "src": "205:10:14"
              }
            ],
            "id": 4079,
            "name": "VariableDeclaration",
            "src": "168:47:14"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "INTERFACE_META_ID",
              "scope": 4178,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes4",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes4",
                  "type": "bytes4"
                },
                "id": 4080,
                "name": "ElementaryTypeName",
                "src": "222:6:14"
              },
              {
                "attributes": {
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "isStructConstructorCall": false,
                  "lValueRequested": false,
                  "names": [
                    null
                  ],
                  "tryCall": false,
                  "type": "bytes4",
                  "type_conversion": true
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "type": "type(bytes4)"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4"
                        },
                        "id": 4081,
                        "name": "ElementaryTypeName",
                        "src": "266:6:14"
                      }
                    ],
                    "id": 4082,
                    "name": "ElementaryTypeNameExpression",
                    "src": "266:6:14"
                  },
                  {
                    "attributes": {
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "isStructConstructorCall": false,
                      "lValueRequested": false,
                      "names": [
                        null
                      ],
                      "tryCall": false,
                      "type": "bytes32",
                      "type_conversion": false
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e2",
                              "typeString": "literal_string \"supportsInterface(bytes4)\""
                            }
                          ],
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": -8,
                          "type": "function (bytes memory) pure returns (bytes32)",
                          "value": "keccak256"
                        },
                        "id": 4083,
                        "name": "Identifier",
                        "src": "273:9:14"
                      },
                      {
                        "attributes": {
                          "hexvalue": "737570706f727473496e746572666163652862797465733429",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "token": "string",
                          "type": "literal_string \"supportsInterface(bytes4)\"",
                          "value": "supportsInterface(bytes4)"
                        },
                        "id": 4084,
                        "name": "Literal",
                        "src": "283:27:14"
                      }
                    ],
                    "id": 4085,
                    "name": "FunctionCall",
                    "src": "273:38:14"
                  }
                ],
                "id": 4086,
                "name": "FunctionCall",
                "src": "266:46:14"
              }
            ],
            "id": 4087,
            "name": "VariableDeclaration",
            "src": "222:90:14"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "TLDLocked"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "label",
                      "scope": 4091,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4088,
                        "name": "ElementaryTypeName",
                        "src": "335:7:14"
                      }
                    ],
                    "id": 4089,
                    "name": "VariableDeclaration",
                    "src": "335:21:14"
                  }
                ],
                "id": 4090,
                "name": "ParameterList",
                "src": "334:23:14"
              }
            ],
            "id": 4091,
            "name": "EventDefinition",
            "src": "319:39:14"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "3f15457f",
              "mutability": "mutable",
              "name": "ens",
              "scope": 4178,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract ENS",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "ENS",
                  "referencedDeclaration": 3533,
                  "type": "contract ENS"
                },
                "id": 4092,
                "name": "UserDefinedTypeName",
                "src": "364:3:14"
              }
            ],
            "id": 4093,
            "name": "VariableDeclaration",
            "src": "364:14:14"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "cbe9e764",
              "mutability": "mutable",
              "name": "locked",
              "scope": 4178,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(bytes32 => bool)",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(bytes32 => bool)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 4094,
                    "name": "ElementaryTypeName",
                    "src": "392:7:14"
                  },
                  {
                    "attributes": {
                      "name": "bool",
                      "type": "bool"
                    },
                    "id": 4095,
                    "name": "ElementaryTypeName",
                    "src": "401:4:14"
                  }
                ],
                "id": 4096,
                "name": "Mapping",
                "src": "384:22:14"
              }
            ],
            "id": 4097,
            "name": "VariableDeclaration",
            "src": "384:36:14"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 4178,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_ens",
                      "scope": 4107,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract ENS",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "ENS",
                          "referencedDeclaration": 3533,
                          "type": "contract ENS"
                        },
                        "id": 4098,
                        "name": "UserDefinedTypeName",
                        "src": "439:3:14"
                      }
                    ],
                    "id": 4099,
                    "name": "VariableDeclaration",
                    "src": "439:8:14"
                  }
                ],
                "id": 4100,
                "name": "ParameterList",
                "src": "438:10:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4101,
                "name": "ParameterList",
                "src": "456:0:14"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract ENS"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4093,
                              "type": "contract ENS",
                              "value": "ens"
                            },
                            "id": 4102,
                            "name": "Identifier",
                            "src": "466:3:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4099,
                              "type": "contract ENS",
                              "value": "_ens"
                            },
                            "id": 4103,
                            "name": "Identifier",
                            "src": "472:4:14"
                          }
                        ],
                        "id": 4104,
                        "name": "Assignment",
                        "src": "466:10:14"
                      }
                    ],
                    "id": 4105,
                    "name": "ExpressionStatement",
                    "src": "466:10:14"
                  }
                ],
                "id": 4106,
                "name": "Block",
                "src": "456:27:14"
              }
            ],
            "id": 4107,
            "name": "FunctionDefinition",
            "src": "427:56:14"
          },
          {
            "attributes": {
              "functionSelector": "8cb8ecec",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setSubnodeOwner",
              "scope": 4178,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "label",
                      "scope": 4132,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4108,
                        "name": "ElementaryTypeName",
                        "src": "514:7:14"
                      }
                    ],
                    "id": 4109,
                    "name": "VariableDeclaration",
                    "src": "514:13:14"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "owner",
                      "scope": 4132,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 4110,
                        "name": "ElementaryTypeName",
                        "src": "529:7:14"
                      }
                    ],
                    "id": 4111,
                    "name": "VariableDeclaration",
                    "src": "529:13:14"
                  }
                ],
                "id": 4112,
                "name": "ParameterList",
                "src": "513:30:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4115,
                "name": "ParameterList",
                "src": "568:0:14"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3982,
                      "type": "modifier ()",
                      "value": "onlyController"
                    },
                    "id": 4113,
                    "name": "Identifier",
                    "src": "553:14:14"
                  }
                ],
                "id": 4114,
                "name": "ModifierInvocation",
                "src": "553:14:14"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 4116,
                            "name": "Identifier",
                            "src": "578:7:14"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!",
                              "prefix": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4097,
                                      "type": "mapping(bytes32 => bool)",
                                      "value": "locked"
                                    },
                                    "id": 4117,
                                    "name": "Identifier",
                                    "src": "587:6:14"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4109,
                                      "type": "bytes32",
                                      "value": "label"
                                    },
                                    "id": 4118,
                                    "name": "Identifier",
                                    "src": "594:5:14"
                                  }
                                ],
                                "id": 4119,
                                "name": "IndexAccess",
                                "src": "587:13:14"
                              }
                            ],
                            "id": 4120,
                            "name": "UnaryOperation",
                            "src": "586:14:14"
                          }
                        ],
                        "id": 4121,
                        "name": "FunctionCall",
                        "src": "578:23:14"
                      }
                    ],
                    "id": 4122,
                    "name": "ExpressionStatement",
                    "src": "578:23:14"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "setSubnodeOwner",
                              "referencedDeclaration": 3467,
                              "type": "function (bytes32,bytes32,address) external returns (bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4093,
                                  "type": "contract ENS",
                                  "value": "ens"
                                },
                                "id": 4123,
                                "name": "Identifier",
                                "src": "611:3:14"
                              }
                            ],
                            "id": 4125,
                            "name": "MemberAccess",
                            "src": "611:19:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4079,
                              "type": "bytes32",
                              "value": "ROOT_NODE"
                            },
                            "id": 4126,
                            "name": "Identifier",
                            "src": "631:9:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4109,
                              "type": "bytes32",
                              "value": "label"
                            },
                            "id": 4127,
                            "name": "Identifier",
                            "src": "642:5:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4111,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 4128,
                            "name": "Identifier",
                            "src": "649:5:14"
                          }
                        ],
                        "id": 4129,
                        "name": "FunctionCall",
                        "src": "611:44:14"
                      }
                    ],
                    "id": 4130,
                    "name": "ExpressionStatement",
                    "src": "611:44:14"
                  }
                ],
                "id": 4131,
                "name": "Block",
                "src": "568:94:14"
              }
            ],
            "id": 4132,
            "name": "FunctionDefinition",
            "src": "489:173:14"
          },
          {
            "attributes": {
              "functionSelector": "4e543b26",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setResolver",
              "scope": 4178,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resolver",
                      "scope": 4147,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 4133,
                        "name": "ElementaryTypeName",
                        "src": "689:7:14"
                      }
                    ],
                    "id": 4134,
                    "name": "VariableDeclaration",
                    "src": "689:16:14"
                  }
                ],
                "id": 4135,
                "name": "ParameterList",
                "src": "688:18:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4138,
                "name": "ParameterList",
                "src": "726:0:14"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4025,
                      "type": "modifier ()",
                      "value": "onlyOwner"
                    },
                    "id": 4136,
                    "name": "Identifier",
                    "src": "716:9:14"
                  }
                ],
                "id": 4137,
                "name": "ModifierInvocation",
                "src": "716:9:14"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "setResolver",
                              "referencedDeclaration": 3474,
                              "type": "function (bytes32,address) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4093,
                                  "type": "contract ENS",
                                  "value": "ens"
                                },
                                "id": 4139,
                                "name": "Identifier",
                                "src": "736:3:14"
                              }
                            ],
                            "id": 4141,
                            "name": "MemberAccess",
                            "src": "736:15:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4079,
                              "type": "bytes32",
                              "value": "ROOT_NODE"
                            },
                            "id": 4142,
                            "name": "Identifier",
                            "src": "752:9:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4134,
                              "type": "address",
                              "value": "resolver"
                            },
                            "id": 4143,
                            "name": "Identifier",
                            "src": "763:8:14"
                          }
                        ],
                        "id": 4144,
                        "name": "FunctionCall",
                        "src": "736:36:14"
                      }
                    ],
                    "id": 4145,
                    "name": "ExpressionStatement",
                    "src": "736:36:14"
                  }
                ],
                "id": 4146,
                "name": "Block",
                "src": "726:53:14"
              }
            ],
            "id": 4147,
            "name": "FunctionDefinition",
            "src": "668:111:14"
          },
          {
            "attributes": {
              "functionSelector": "01670ba9",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "lock",
              "scope": 4178,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "label",
                      "scope": 4165,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4148,
                        "name": "ElementaryTypeName",
                        "src": "799:7:14"
                      }
                    ],
                    "id": 4149,
                    "name": "VariableDeclaration",
                    "src": "799:13:14"
                  }
                ],
                "id": 4150,
                "name": "ParameterList",
                "src": "798:15:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4153,
                "name": "ParameterList",
                "src": "833:0:14"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4025,
                      "type": "modifier ()",
                      "value": "onlyOwner"
                    },
                    "id": 4151,
                    "name": "Identifier",
                    "src": "823:9:14"
                  }
                ],
                "id": 4152,
                "name": "ModifierInvocation",
                "src": "823:9:14"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4091,
                              "type": "function (bytes32)",
                              "value": "TLDLocked"
                            },
                            "id": 4154,
                            "name": "Identifier",
                            "src": "848:9:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4149,
                              "type": "bytes32",
                              "value": "label"
                            },
                            "id": 4155,
                            "name": "Identifier",
                            "src": "858:5:14"
                          }
                        ],
                        "id": 4156,
                        "name": "FunctionCall",
                        "src": "848:16:14"
                      }
                    ],
                    "id": 4157,
                    "name": "EmitStatement",
                    "src": "843:21:14"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4097,
                                  "type": "mapping(bytes32 => bool)",
                                  "value": "locked"
                                },
                                "id": 4158,
                                "name": "Identifier",
                                "src": "874:6:14"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4149,
                                  "type": "bytes32",
                                  "value": "label"
                                },
                                "id": 4159,
                                "name": "Identifier",
                                "src": "881:5:14"
                              }
                            ],
                            "id": 4160,
                            "name": "IndexAccess",
                            "src": "874:13:14"
                          },
                          {
                            "attributes": {
                              "hexvalue": "74727565",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "bool",
                              "type": "bool",
                              "value": "true"
                            },
                            "id": 4161,
                            "name": "Literal",
                            "src": "890:4:14"
                          }
                        ],
                        "id": 4162,
                        "name": "Assignment",
                        "src": "874:20:14"
                      }
                    ],
                    "id": 4163,
                    "name": "ExpressionStatement",
                    "src": "874:20:14"
                  }
                ],
                "id": 4164,
                "name": "Block",
                "src": "833:68:14"
              }
            ],
            "id": 4165,
            "name": "FunctionDefinition",
            "src": "785:116:14"
          },
          {
            "attributes": {
              "functionSelector": "01ffc9a7",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "supportsInterface",
              "scope": 4178,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "interfaceID",
                      "scope": 4177,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 4166,
                        "name": "ElementaryTypeName",
                        "src": "934:6:14"
                      }
                    ],
                    "id": 4167,
                    "name": "VariableDeclaration",
                    "src": "934:18:14"
                  }
                ],
                "id": 4168,
                "name": "ParameterList",
                "src": "933:20:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 4177,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4169,
                        "name": "ElementaryTypeName",
                        "src": "977:4:14"
                      }
                    ],
                    "id": 4170,
                    "name": "VariableDeclaration",
                    "src": "977:4:14"
                  }
                ],
                "id": 4171,
                "name": "ParameterList",
                "src": "976:6:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4171
                    },
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4167,
                              "type": "bytes4",
                              "value": "interfaceID"
                            },
                            "id": 4172,
                            "name": "Identifier",
                            "src": "1000:11:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4087,
                              "type": "bytes4",
                              "value": "INTERFACE_META_ID"
                            },
                            "id": 4173,
                            "name": "Identifier",
                            "src": "1015:17:14"
                          }
                        ],
                        "id": 4174,
                        "name": "BinaryOperation",
                        "src": "1000:32:14"
                      }
                    ],
                    "id": 4175,
                    "name": "Return",
                    "src": "993:39:14"
                  }
                ],
                "id": 4176,
                "name": "Block",
                "src": "983:56:14"
              }
            ],
            "id": 4177,
            "name": "FunctionDefinition",
            "src": "907:132:14"
          }
        ],
        "id": 4178,
        "name": "ContractDefinition",
        "src": "123:918:14"
      }
    ],
    "id": 4179,
    "name": "SourceUnit",
    "src": "0:1042:14"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.4+commit.3f05b770.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.3",
  "updatedAt": "2021-01-21T03:26:26.192Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}