{
  "contractName": "Controller",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_params",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "enum GlobalConstraintInterface.CallPhase",
          "name": "_when",
          "type": "uint8"
        }
      ],
      "name": "AddGlobalConstraint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "BurnReputation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "MintReputation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "MintTokens",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        }
      ],
      "name": "RegisterScheme",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_isPre",
          "type": "bool"
        }
      ],
      "name": "RemoveGlobalConstraint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        }
      ],
      "name": "UnregisterScheme",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_oldController",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newController",
          "type": "address"
        }
      ],
      "name": "UpgradeController",
      "type": "event"
    },
    {
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "avatar",
      "outputs": [
        {
          "internalType": "contract Avatar",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "globalConstraintsPost",
      "outputs": [
        {
          "internalType": "address",
          "name": "gcAddress",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "params",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "globalConstraintsPre",
      "outputs": [
        {
          "internalType": "address",
          "name": "gcAddress",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "params",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "globalConstraintsRegisterPost",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isRegistered",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "globalConstraintsRegisterPre",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isRegistered",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nativeReputation",
      "outputs": [
        {
          "internalType": "contract Reputation",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nativeToken",
      "outputs": [
        {
          "internalType": "contract DAOToken",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "newController",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "schemes",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "paramsHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "permissions",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "mintReputation",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "burnReputation",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "mintTokens",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_paramsHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "_permissions",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "registerScheme",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "unregisterScheme",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "unregisterSelf",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_params",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "addGlobalConstraint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "removeGlobalConstraint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_newController",
          "type": "address"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "upgradeController",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_contract",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "genericCall",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amountInWei",
          "type": "uint256"
        },
        {
          "internalType": "address payable",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "sendEther",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_externalToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "externalTokenTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_externalToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "externalTokenTransferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_externalToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "externalTokenApproval",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "string",
          "name": "_metaData",
          "type": "string"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "metaData",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "getNativeReputation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "isSchemeRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "getSchemeParameters",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "getSchemePermissions",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getGlobalConstraintParameters",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "globalConstraintsCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "isGlobalConstraintRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_params\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enum GlobalConstraintInterface.CallPhase\",\"name\":\"_when\",\"type\":\"uint8\"}],\"name\":\"AddGlobalConstraint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"BurnReputation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"MintReputation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"MintTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scheme\",\"type\":\"address\"}],\"name\":\"RegisterScheme\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_isPre\",\"type\":\"bool\"}],\"name\":\"RemoveGlobalConstraint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scheme\",\"type\":\"address\"}],\"name\":\"UnregisterScheme\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newController\",\"type\":\"address\"}],\"name\":\"UpgradeController\",\"type\":\"event\"},{\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_params\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"addGlobalConstraint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"avatar\",\"outputs\":[{\"internalType\":\"contract Avatar\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"burnReputation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_externalToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"externalTokenApproval\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_externalToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"externalTokenTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_externalToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"externalTokenTransferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"genericCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getGlobalConstraintParameters\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"getNativeReputation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_scheme\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"getSchemeParameters\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_scheme\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"getSchemePermissions\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"globalConstraintsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"globalConstraintsPost\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"gcAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"params\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"globalConstraintsPre\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"gcAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"params\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"globalConstraintsRegisterPost\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"globalConstraintsRegisterPre\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"isGlobalConstraintRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_scheme\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"isSchemeRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"_metaData\",\"type\":\"string\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"metaData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"mintReputation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"mintTokens\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nativeReputation\",\"outputs\":[{\"internalType\":\"contract Reputation\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nativeToken\",\"outputs\":[{\"internalType\":\"contract DAOToken\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"newController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_scheme\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_paramsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"_permissions\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"registerScheme\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"removeGlobalConstraint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"schemes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"paramsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"permissions\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountInWei\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"sendEther\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_scheme\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"unregisterScheme\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"unregisterSelf\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newController\",\"type\":\"address\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"upgradeController\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A controller controls the organizations tokens, reputation and avatar. It is subject to a set of schemes and constraints that determine its behavior. Each scheme has it own parameters and operation permissions.\",\"methods\":{\"addGlobalConstraint(address,bytes32,address)\":{\"details\":\"add or update Global Constraint\",\"params\":{\"_globalConstraint\":\"the address of the global constraint to be added.\",\"_params\":\"the constraint parameters hash.\"},\"return\":\"bool which represents a success\"},\"burnReputation(uint256,address,address)\":{\"details\":\"Burns `_amount` of reputation from `_from`\",\"params\":{\"_amount\":\"amount of reputation to burn\",\"_from\":\"The address that will lose the reputation\"},\"return\":\"bool which represents a success\"},\"externalTokenApproval(address,address,uint256,address)\":{\"details\":\"externalTokenApproval approve the spender address to spend a specified amount of tokens     on behalf of msg.sender.\",\"params\":{\"_externalToken\":\"the address of the Token Contract\",\"_spender\":\"address\",\"_value\":\"the amount of ether (in Wei) which the approval is referring to.\"},\"return\":\"bool which represents a success\"},\"externalTokenTransfer(address,address,uint256,address)\":{\"details\":\"send some amount of arbitrary ERC20 Tokens\",\"params\":{\"_externalToken\":\"the address of the Token Contract\",\"_to\":\"address of the beneficiary\",\"_value\":\"the amount of ether (in Wei) to send\"},\"return\":\"bool which represents a success\"},\"externalTokenTransferFrom(address,address,address,uint256,address)\":{\"details\":\"transfer token \\\"from\\\" address \\\"to\\\" address     One must to approve the amount of tokens which can be spend from the     \\\"from\\\" account.This can be done using externalTokenApprove.\",\"params\":{\"_externalToken\":\"the address of the Token Contract\",\"_from\":\"address of the account to send from\",\"_to\":\"address of the beneficiary\",\"_value\":\"the amount of ether (in Wei) to send\"},\"return\":\"bool which represents a success\"},\"genericCall(address,bytes,address,uint256)\":{\"details\":\"perform a generic call to an arbitrary contract\",\"params\":{\"_avatar\":\"the controller's avatar address\",\"_contract\":\"the contract's address to call\",\"_data\":\"ABI-encoded contract call to call `_contract` address.\",\"_value\":\"value (ETH) to transfer with the transaction\"},\"return\":\"bool -success        bytes  - the return value of the called _contract's function.\"},\"getNativeReputation(address)\":{\"details\":\"getNativeReputation\",\"params\":{\"_avatar\":\"the organization avatar.\"},\"return\":\"organization native reputation\"},\"globalConstraintsCount(address)\":{\"details\":\"globalConstraintsCount return the global constraint pre and post count\",\"return\":\"uint256 globalConstraintsPre count.uint256 globalConstraintsPost count.\"},\"metaData(string,address)\":{\"details\":\"metaData emits an event with a string, should contain the hash of some meta data.\",\"params\":{\"_avatar\":\"Avatar\",\"_metaData\":\"a string representing a hash of the meta data\"},\"return\":\"bool which represents a success\"},\"mintReputation(uint256,address,address)\":{\"details\":\"Mint `_amount` of reputation that are assigned to `_to` .\",\"params\":{\"_amount\":\"amount of reputation to mint\",\"_to\":\"beneficiary address\"},\"return\":\"bool which represents a success\"},\"mintTokens(uint256,address,address)\":{\"details\":\"mint tokens .\",\"params\":{\"_amount\":\"amount of token to mint\",\"_beneficiary\":\"beneficiary address\"},\"return\":\"bool which represents a success\"},\"registerScheme(address,bytes32,bytes4,address)\":{\"details\":\"register a scheme\",\"params\":{\"_paramsHash\":\"a hashed configuration of the usage of the scheme\",\"_permissions\":\"the permissions the new scheme will have\",\"_scheme\":\"the address of the scheme\"},\"return\":\"bool which represents a success\"},\"removeGlobalConstraint(address,address)\":{\"details\":\"remove Global Constraint\",\"params\":{\"_globalConstraint\":\"the address of the global constraint to be remove.\"},\"return\":\"bool which represents a success\"},\"sendEther(uint256,address,address)\":{\"details\":\"send some ether\",\"params\":{\"_amountInWei\":\"the amount of ether (in Wei) to send\",\"_to\":\"address of the beneficiary\"},\"return\":\"bool which represents a success\"},\"unregisterScheme(address,address)\":{\"details\":\"unregister a scheme\",\"params\":{\"_scheme\":\"the address of the scheme\"},\"return\":\"bool which represents a success\"},\"unregisterSelf(address)\":{\"details\":\"unregister the caller's scheme\",\"return\":\"bool which represents a success\"},\"upgradeController(address,address)\":{\"details\":\"upgrade the Controller     The function will trigger an event 'UpgradeController'.\",\"params\":{\"_newController\":\"the address of the new controller.\"},\"return\":\"bool which represents a success\"}},\"title\":\"Controller contract\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@daostack/arc/contracts/controller/Controller.sol\":\"Controller\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@daostack/arc/contracts/controller/Avatar.sol\":{\"keccak256\":\"0x4e4fb9d3bc21f42fbfc6a01e9f8aa483a59e9f447b0d604f55b587a81ec09ef4\",\"urls\":[\"bzz-raw://9d3c1c7575cf6075ea1d89921f09b9b8e322b208dacaf0446cd4f64506c999f0\",\"dweb:/ipfs/QmVGDDHAR2ByuQpbgV7BBKXGEAcbaWvejpEZYzHgaagBFK\"]},\"@daostack/arc/contracts/controller/Controller.sol\":{\"keccak256\":\"0xb46102ed94ae64c1c4cdb758e0f35b652f3bea6f7a32fa1fe988cbbeb489872a\",\"urls\":[\"bzz-raw://84e4f0fd93a10602ad6d331160ff5429107b74da9e684d96d32ee25aad6ab748\",\"dweb:/ipfs/QmPNu7s7x7reUY9tupW7bxNz5TY6Adu9tjRkj9x6X6ys55\"]},\"@daostack/arc/contracts/controller/ControllerInterface.sol\":{\"keccak256\":\"0x933e92612c90f292c7b59908958b003f1a13d90b97bed0572b566353c20974dc\",\"urls\":[\"bzz-raw://ce1fcf85b744fcce2dbd4205e3943e9b4ec36a5f0330d4bbf61e65f1a3e0e470\",\"dweb:/ipfs/QmUWiLkBDdekhpy93nTzBtxDHL6yNh6sTUM9G8VbsHcBzy\"]},\"@daostack/arc/contracts/controller/DAOToken.sol\":{\"keccak256\":\"0x9b213e4e3ceeffcfc1c962a43b70b8d763d8091a2dd713fc1989b97bb68786e6\",\"urls\":[\"bzz-raw://51d1d6e85fd90f45395a16b7a3c703c4636e836041f2a13f806e4222ef2e59c1\",\"dweb:/ipfs/QmQjeCeFf7TJzsYjT5scyZUDDixBA8Yy8YppgBuxcKPDnP\"]},\"@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol\":{\"keccak256\":\"0xc006c4591ec10b845a56e13f6791db2c428610953034686d52b2a934b6c8f36f\",\"urls\":[\"bzz-raw://19495cd88280e54d7ddcd043ffeff75e6d3777a0c42debcd61cae448e9497ea0\",\"dweb:/ipfs/QmYxWz7CgFmmddrcVXJKfob5Ktwykc2imNVUwLSR5WR8bJ\"]},\"@daostack/arc/contracts/libs/SafeERC20.sol\":{\"keccak256\":\"0xf6727d432f67046145b078f40c1cc4f6be7b0d12a6678ecaf457edf7550d244c\",\"urls\":[\"bzz-raw://5dba7734c4fed446c084a707761cbc66ba22b8b93ef53c8d4a22a76b6e271690\",\"dweb:/ipfs/QmP2VpPKUqLh4ZZs6LaxHVpCN1zCmiorygL9bMub4mbYCw\"]},\"@daostack/infra/contracts/Reputation.sol\":{\"keccak256\":\"0x3d226dac0fe7d758f0287fb28bc25fcec1f69d19888ae3a550fa49856d61c482\",\"urls\":[\"bzz-raw://8856852c8fe0ba1c9aab326f0a9a6e7f31a238de2778fa5188e6fc399f7eb352\",\"dweb:/ipfs/QmVH4ppR9Dk7v8yxaSgeArdMv9gBBVoQxEf4E3UsqQ4rY2\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzz-raw://1eb493553b27efd46c231a836a83ce50d215639feb97b4aac9f301d0fd034ff5\",\"dweb:/ipfs/QmbMdvSXcqGKxeeYvzF3VrWpoHQyVzMXBhzhAokF2Gdymv\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\",\"urls\":[\"bzz-raw://f07a2c393caa85f62f0aaa461e3edd50aa59371d4209778ba0558d7f8b4b856c\",\"dweb:/ipfs/QmeN3ZiYGSjCnQFeYaJNgoXjF9eDue1g3e9pqManRkeBtV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzz-raw://f40c91ca270bdc9b156f339081a0fc2bbcf73cf5f62b8c73ba555df753ff6619\",\"dweb:/ipfs/QmT8y2VVjGaFdGphpcXrgvdPi2EgF9LuCDgJiJ89LvpFRV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0xa3e68fd7f987c8fbdaf4867d428a69a15f3cf2f69709a5b0a0fbef750b0e6fbc\",\"urls\":[\"bzz-raw://50b1ff986d3b2793850a66c8429d9886fdfb134b1509b3e98714e3e2a71e24f5\",\"dweb:/ipfs/QmSQBYPeY9tbR3ciGRNQqvcWKnNiuxtVMq2MsPWpLwuGGm\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzz-raw://ee762ff5b7746e41d27dcbcea00c7a3034b58adb1b45ddadddb5b721aff450df\",\"dweb:/ipfs/QmdxqtgEFZjHCoiYyz6pUAQ5iBm7As25jcyEbZoTaAgyDa\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x5c731061b804fa256fc8c05150eafe5d20b6bb94541a8f187912bf84f7033f34\",\"urls\":[\"bzz-raw://a3c2d9f046beebab7fb41b1b124a6a124a36f510f7c67365861402ac831bdc71\",\"dweb:/ipfs/QmUtASRgitregbKH83anopLtF9vFQe3BKeAjhUa6F7t9YV\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162003b4238038062003b42833981810160405260208110156200003757600080fd5b5051600180546001600160a01b0319166001600160a01b03808416919091179182905560408051631c2eb17b60e31b81529051929091169163e1758bd891600480820192602092909190829003018186803b1580156200009657600080fd5b505afa158015620000ab573d6000803e3d6000fd5b505050506040513d6020811015620000c257600080fd5b5051600280546001600160a01b0319166001600160a01b039283161790556001546040805163089ae1c960e41b8152905191909216916389ae1c90916004808301926020929190829003018186803b1580156200011e57600080fd5b505afa15801562000133573d6000803e3d6000fd5b505050506040513d60208110156200014a57600080fd5b5051600380546001600160a01b0319166001600160a01b03909216919091179055506040805180820182526000808252601f60e01b6020808401918252338352829052928120915182559151600191909101805463ffffffff191660e09290921c919091179055613980908190620001c290396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806389ae1c901161010f578063e08738da116100a2578063e8c98b2211610071578063e8c98b221461083e578063eaf994b21461085b578063f76488be1461088f578063fb4856a2146108bd576101e5565b8063e08738da1461078e578063e1758bd8146107bc578063e4537a74146107c4578063e869d45f146107fa576101e5565b8063b9a04cdd116100de578063b9a04cdd1461057f578063c9b62eb1146105bb578063d1b7089a14610634578063db6149ce14610746576101e5565b806389ae1c90146104d85780638da03997146104e05780639b51e35a146105065780639be2faed14610551576101e5565b806351803cd8116101875780636c525b13116101565780636c525b13146104195780636e94d2781461043f578063814784f614610473578063824f2f1f14610499576101e5565b806351803cd81461036d5780635aef7de6146103a9578063634965da146103b15780636407e432146103e5576101e5565b80633a02263c116101c35780633a02263c146102ad57806342427bf8146102d15780634422d372146102ff5780634f52b5be1461033f576101e5565b8063039de01d146101ea578063177eebb01461022c5780631c4d56081461026d575b600080fd5b6102186004803603604081101561020057600080fd5b506001600160a01b0381358116916020013516610903565b604080519115158252519081900360200190f35b6102526004803603602081101561024257600080fd5b50356001600160a01b0316610c09565b60408051921515835260208301919091528051918290030190f35b61029b6004803603604081101561028357600080fd5b506001600160a01b0381358116916020013516610c28565b60408051918252519081900360200190f35b6102b5610c6a565b604080516001600160a01b039092168252519081900360200190f35b610218600480360360408110156102e757600080fd5b506001600160a01b0381358116916020013516610c79565b61031c6004803603602081101561031557600080fd5b503561113b565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6102186004803603604081101561035557600080fd5b506001600160a01b0381358116916020013516611170565b6102186004803603608081101561038357600080fd5b506001600160a01b0381358116916020810135821691604082013591606001351661156b565b6102b561184f565b610218600480360360608110156103c757600080fd5b508035906001600160a01b036020820135811691604001351661185e565b610218600480360360608110156103fb57600080fd5b508035906001600160a01b0360208201358116916040013516611b25565b6102186004803603602081101561042f57600080fd5b50356001600160a01b0316611e24565b6102186004803603606081101561045557600080fd5b508035906001600160a01b0360208201358116916040013516611eab565b6102526004803603602081101561048957600080fd5b50356001600160a01b03166121ae565b6104bf600480360360208110156104af57600080fd5b50356001600160a01b03166121cd565b6040805192835260208301919091528051918290030190f35b6102b56121ff565b6102b5600480360360208110156104f657600080fd5b50356001600160a01b031661220e565b6105346004803603604081101561051c57600080fd5b506001600160a01b0381358116916020013516612240565b604080516001600160e01b03199092168252519081900360200190f35b6102186004803603604081101561056757600080fd5b506001600160a01b0381358116916020013516612283565b6102186004803603608081101561059557600080fd5b506001600160a01b038135811691602081013582169160408201359160600135166122b3565b610218600480360360408110156105d157600080fd5b8101906020810181356401000000008111156105ec57600080fd5b8201836020820111156105fe57600080fd5b8035906020019184600183028401116401000000008311171561062057600080fd5b9193509150356001600160a01b0316612585565b6106c36004803603608081101561064a57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561067557600080fd5b82018360208201111561068757600080fd5b803590602001918460018302840111640100000000831117156106a957600080fd5b91935091506001600160a01b038135169060200135612675565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561070a5781810151838201526020016106f2565b50505050905090810190601f1680156107375780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b61076c6004803603602081101561075c57600080fd5b50356001600160a01b0316612a46565b604080519283526001600160e01b031990911660208301528051918290030190f35b61029b600480360360408110156107a457600080fd5b506001600160a01b0381358116916020013516612a62565b6102b5612b2e565b610218600480360360608110156107da57600080fd5b506001600160a01b03813581169160208101359160409091013516612b3d565b6102186004803603608081101561081057600080fd5b506001600160a01b0381358116916020810135916001600160e01b0319604083013516916060013516612f09565b61031c6004803603602081101561085457600080fd5b5035613246565b6102186004803603606081101561087157600080fd5b508035906001600160a01b0360208201358116916040013516613253565b610218600480360360408110156108a557600080fd5b506001600160a01b0381358116916020013516613556565b610218600480360360a08110156108d357600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013591608090910135166135b8565b3360009081526020819052604081206001015460e01b600160e11b9081161461092b57600080fd5b6f756e7265676973746572536368656d6560801b60005b600554811015610a32576005818154811061095957fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061098c57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156109f557600080fd5b505af1158015610a09573d6000803e3d6000fd5b505050506040513d6020811015610a1f57600080fd5b5051610a2a57600080fd5b600101610942565b60015484906001600160a01b03808316911614610a4e57600080fd5b610a57866138a5565b610a645760009350610b0b565b336000908152602081905260408082206001908101546001600160a01b038a168452919092209091015460e091821b19911b16601f60e01b1615610aa757600080fd5b6040516001600160a01b0387169033907f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf90600090a36001600160a01b03861660009081526020819052604081209081556001908101805463ffffffff1916905593505b50600090505b600654811015610c015760068181548110610b2857fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d91339185908110610b5b57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015610bc457600080fd5b505af1158015610bd8573d6000803e3d6000fd5b505050506040513d6020811015610bee57600080fd5b5051610bf957600080fd5b600101610b11565b505092915050565b6007602052600090815260409020805460019091015460ff9091169082565b60015460009082906001600160a01b03808316911614610c4757600080fd5b6001600160a01b03841660009081526020819052604090205491505b5092915050565b6004546001600160a01b031681565b3360009081526020819052604081206001015460e01b600160e31b90811614610ca157600080fd5b60015482906001600160a01b03808316911614610cbd57600080fd5b6004546001600160a01b031615610cd357600080fd5b6001600160a01b038416610ce657600080fd5b600480546001600160a01b0319166001600160a01b0386811691821783556001546040805163f2fde38b60e01b815294850193909352915191169163f2fde38b91602480830192600092919082900301818387803b158015610d4757600080fd5b505af1158015610d5b573d6000803e3d6000fd5b50505050836001600160a01b0316600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610db757600080fd5b505afa158015610dcb573d6000803e3d6000fd5b505050506040513d6020811015610de157600080fd5b50516001600160a01b031614610df657600080fd5b60025460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015610e3a57600080fd5b505afa158015610e4e573d6000803e3d6000fd5b505050506040513d6020811015610e6457600080fd5b50516001600160a01b03161415610f72576002546040805163f2fde38b60e01b81526001600160a01b0387811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015610ec357600080fd5b505af1158015610ed7573d6000803e3d6000fd5b50505050836001600160a01b0316600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3357600080fd5b505afa158015610f47573d6000803e3d6000fd5b505050506040513d6020811015610f5d57600080fd5b50516001600160a01b031614610f7257600080fd5b60035460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015610fb657600080fd5b505afa158015610fca573d6000803e3d6000fd5b505050506040513d6020811015610fe057600080fd5b50516001600160a01b031614156110ee576003546040805163f2fde38b60e01b81526001600160a01b0387811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b15801561103f57600080fd5b505af1158015611053573d6000803e3d6000fd5b50505050836001600160a01b0316600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110af57600080fd5b505afa1580156110c3573d6000803e3d6000fd5b505050506040513d60208110156110d957600080fd5b50516001600160a01b0316146110ee57600080fd5b600454604080516001600160a01b039290921682525130917fdb7cbacf8df312d794506c0cc9af07f64d29ca075796ea2e950a3832cc9a63dd919081900360200190a25060019392505050565b6005818154811061114857fe5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b3360009081526020819052604081206001015460e01b600160e21b9081161461119857600080fd5b60015482906001600160a01b038083169116146111b457600080fd5b6111bc6138d1565b6111c46138d1565b6000866001600160a01b031663e2b0caef6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561120157600080fd5b505af1158015611215573d6000803e3d6000fd5b505050506040513d602081101561122b57600080fd5b5051905060008082600281111561123e57fe5b14806112555750600282600281111561125357fe5b145b15611399576001600160a01b0388166000908152600760209081526040918290208251808401909352805460ff16158015845260019091015491830191909152909450611399576001600580549050038460200151101561135a576005805460001981019081106112c257fe5b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101548183015290850151600580549295508592909190811061130a57fe5b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001948501558781015187519092168352600790526040909120909101555b600580549061136d9060001983016138e8565b50506001600160a01b0387166000908152600760205260408120805460ff191681556001908101919091555b60018260028111156113a757fe5b14806113be575060028260028111156113bc57fe5b145b15611502576001600160a01b0388166000908152600860209081526040918290208251808401909352805460ff1615801584526001909101549183019190915290945061150257600160068054905003846020015110156114c35760068054600019810190811061142b57fe5b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101548183015290850151600680549295508592909190811061147357fe5b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001948501558781015187519092168352600890526040909120909101555b60068054906114d69060001983016138e8565b50506001600160a01b0387166000908152600860205260408120805460ff191681556001908101919091555b80156115605760208401516001600160a01b038916907fcdf1a50ea6b7de555bd409f8a4a53ea43c6dc6b4caa961889da9e005f21bbaa990600085600281111561154857fe5b60408051938452911460208301528051918290030190a25b979650505050505050565b3360009081526020819052604081206001015460e01b600160e01b9081161461159357600080fd5b7f65787465726e616c546f6b656e496e637265617365417070726f76616c00000060005b6005548110156116a757600581815481106115ce57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061160157fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561166a57600080fd5b505af115801561167e573d6000803e3d6000fd5b505050506040513d602081101561169457600080fd5b505161169f57600080fd5b6001016115b7565b60015484906001600160a01b038083169116146116c357600080fd5b6001546040805163ab751f7160e01b81526001600160a01b038b811660048301528a81166024830152604482018a90529151919092169163ab751f719160648083019260209291908290030181600087803b15801561172157600080fd5b505af1158015611735573d6000803e3d6000fd5b505050506040513d602081101561174b57600080fd5b5051935050600090505b600654811015611845576006818154811061176c57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d9133918590811061179f57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561180857600080fd5b505af115801561181c573d6000803e3d6000fd5b505050506040513d602081101561183257600080fd5b505161183d57600080fd5b600101611755565b5050949350505050565b6001546001600160a01b031681565b3360009081526020819052604081206001015460e01b600160e01b9081161461188657600080fd5b6839b2b73222ba3432b960b91b60005b60055481101561198657600581815481106118ad57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab2913391859081106118e057fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561194957600080fd5b505af115801561195d573d6000803e3d6000fd5b505050506040513d602081101561197357600080fd5b505161197e57600080fd5b600101611896565b60015484906001600160a01b038083169116146119a257600080fd5b6001546040805163658b6a5160e11b8152600481018a90526001600160a01b0389811660248301529151919092169163cb16d4a29160448083019260209291908290030181600087803b1580156119f857600080fd5b505af1158015611a0c573d6000803e3d6000fd5b505050506040513d6020811015611a2257600080fd5b5051935050600090505b600654811015611b1c5760068181548110611a4357fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d91339185908110611a7657fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611adf57600080fd5b505af1158015611af3573d6000803e3d6000fd5b505050506040513d6020811015611b0957600080fd5b5051611b1457600080fd5b600101611a2c565b50509392505050565b3360009081526020819052604081206001015460e01b600160e01b90811614611b4d57600080fd5b696d696e74546f6b656e7360b01b60005b600554811015611c4e5760058181548110611b7557fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab291339185908110611ba857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611c1157600080fd5b505af1158015611c25573d6000803e3d6000fd5b505050506040513d6020811015611c3b57600080fd5b5051611c4657600080fd5b600101611b5e565b60015484906001600160a01b03808316911614611c6a57600080fd5b6040805188815290516001600160a01b0388169133917f21f9c9a1a1f9a311a50f15fec5c1faa9e21fc9edf964f0fdecba5bd490484c5e9181900360200190a3600254604080516340c10f1960e01b81526001600160a01b038981166004830152602482018b9052915191909216916340c10f199160448083019260209291908290030181600087803b158015611d0057600080fd5b505af1158015611d14573d6000803e3d6000fd5b505050506040513d6020811015611d2a57600080fd5b5051935050600090505b600654811015611b1c5760068181548110611d4b57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d91339185908110611d7e57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611de757600080fd5b505af1158015611dfb573d6000803e3d6000fd5b505050506040513d6020811015611e1157600080fd5b5051611e1c57600080fd5b600101611d34565b60015460009082906001600160a01b03808316911614611e4357600080fd5b611e4c336138a5565b611e595760009150611ea5565b33600081815260208190526040808220828155600101805463ffffffff191690555182917f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf91a3600191505b50919050565b3360009081526020819052604081206001015460e01b600160e01b90811614611ed357600080fd5b6d313ab9372932b83aba30ba34b7b760911b60005b600554811015611fd85760058181548110611eff57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab291339185908110611f3257fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611f9b57600080fd5b505af1158015611faf573d6000803e3d6000fd5b505050506040513d6020811015611fc557600080fd5b5051611fd057600080fd5b600101611ee8565b60015484906001600160a01b03808316911614611ff457600080fd5b6040805188815290516001600160a01b0388169133917f186d8887e1b22f9d9b16849c36baa748950d09d9c9b67a4a6ea140eaad00c21c9181900360200190a360035460408051632770a7eb60e21b81526001600160a01b038981166004830152602482018b905291519190921691639dc29fac9160448083019260209291908290030181600087803b15801561208a57600080fd5b505af115801561209e573d6000803e3d6000fd5b505050506040513d60208110156120b457600080fd5b5051935050600090505b600654811015611b1c57600681815481106120d557fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d9133918590811061210857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561217157600080fd5b505af1158015612185573d6000803e3d6000fd5b505050506040513d602081101561219b57600080fd5b50516121a657600080fd5b6001016120be565b6008602052600090815260409020805460019091015460ff9091169082565b600154600090819083906001600160a01b038083169116146121ee57600080fd5b600554600654909350915050915091565b6003546001600160a01b031681565b60015460009082906001600160a01b0380831691161461222d57600080fd5b50506003546001600160a01b0316919050565b60015460009082906001600160a01b0380831691161461225f57600080fd5b5050506001600160a01b031660009081526020819052604090206001015460e01b90565b60015460009082906001600160a01b038083169116146122a257600080fd5b6122ab846138a5565b949350505050565b3360009081526020819052604081206001015460e01b600160e01b908116146122db57600080fd5b7432bc3a32b93730b62a37b5b2b72a3930b739b332b960591b60005b6005548110156123e7576005818154811061230e57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061234157fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156123aa57600080fd5b505af11580156123be573d6000803e3d6000fd5b505050506040513d60208110156123d457600080fd5b50516123df57600080fd5b6001016122f7565b60015484906001600160a01b0380831691161461240357600080fd5b6001546040805163dab0efff60e01b81526001600160a01b038b811660048301528a81166024830152604482018a90529151919092169163dab0efff9160648083019260209291908290030181600087803b15801561246157600080fd5b505af1158015612475573d6000803e3d6000fd5b505050506040513d602081101561248b57600080fd5b5051935050600090505b60065481101561184557600681815481106124ac57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d913391859081106124df57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561254857600080fd5b505af115801561255c573d6000803e3d6000fd5b505050506040513d602081101561257257600080fd5b505161257d57600080fd5b600101612495565b3360009081526020819052604081206001015460e01b600160e41b908116146125ad57600080fd5b60015482906001600160a01b038083169116146125c957600080fd5b600154604051632242b11b60e21b8152602060048201908152602482018790526001600160a01b039092169163890ac46c91889188918190604401848480828437600081840152601f19601f8201169050808301925050509350505050602060405180830381600087803b15801561264057600080fd5b505af1158015612654573d6000803e3d6000fd5b505050506040513d602081101561266a57600080fd5b505195945050505050565b3360009081526020819052604081206001015460609060e01b600160e41b908116146126a057600080fd5b6a19d95b995c9a58d0d85b1b60aa1b60005b6005548110156127a257600581815481106126c957fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab2913391859081106126fc57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561276557600080fd5b505af1158015612779573d6000803e3d6000fd5b505050506040513d602081101561278f57600080fd5b505161279a57600080fd5b6001016126b2565b60015486906001600160a01b038083169116146127be57600080fd5b60015460405163057e2c8b60e31b81526001600160a01b038c811660048301908152604483018a9052606060248401908152606484018d90529190931692632bf16458928e928e928e928d9290608401858580828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561284c57600080fd5b505af1158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604090815281101561288957600080fd5b8151602083018051604051929492938301929190846401000000008211156128b057600080fd5b9083019060208201858111156128c557600080fd5b82516401000000008111828201881017156128df57600080fd5b82525081516020918201929091019080838360005b8381101561290c5781810151838201526020016128f4565b50505050905090810190601f1680156129395780820380516001836020036101000a031916815260200191505b506040525050509450945050600090505b600654811015612a3a576006818154811061296157fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d9133918590811061299457fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156129fd57600080fd5b505af1158015612a11573d6000803e3d6000fd5b505050506040513d6020811015612a2757600080fd5b5051612a3257600080fd5b60010161294a565b50509550959350505050565b6000602081905290815260409020805460019091015460e01b82565b6000612a6c6138d1565b506001600160a01b0383166000908152600760209081526040918290208251808401909352805460ff16158015845260019091015491830191909152612ad7576005816020015181548110612abd57fe5b906000526020600020906002020160010154915050612b28565b506001600160a01b0383166000908152600860209081526040918290208251808401909352805460ff16158015845260019091015491830191909152610c63576006816020015181548110612abd57fe5b92915050565b6002546001600160a01b031681565b3360009081526020819052604081206001015460e01b600160e21b90811614612b6557600080fd5b60015482906001600160a01b03808316911614612b8157600080fd5b6000856001600160a01b031663e2b0caef6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612bbe57600080fd5b505af1158015612bd2573d6000803e3d6000fd5b505050506040513d6020811015612be857600080fd5b505190506000816002811115612bfa57fe5b1480612c1157506002816002811115612c0f57fe5b145b15612d49576001600160a01b03861660009081526007602052604090205460ff16612d08576040805180820182526001600160a01b0388811680835260208084018a81526005805460018082018355600083815297517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600290930292830180546001600160a01b031916919098161790965591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db190920191909155855180870187528481529054600019018183019081529285526007909152939092209251835460ff19169015151783559051910155612d49565b6001600160a01b038616600090815260076020526040902060010154600580548792908110612d3357fe5b9060005260206000209060020201600101819055505b6001816002811115612d5757fe5b1480612d6e57506002816002811115612d6c57fe5b145b15612ea6576001600160a01b03861660009081526008602052604090205460ff16612e65576040805180820182526001600160a01b0388811680835260208084018a81526006805460018082018355600083815297517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600290930292830180546001600160a01b031916919098161790965591517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090920191909155855180870187528481529054600019018183019081529285526008909152939092209251835460ff19169015151783559051910155612ea6565b6001600160a01b038616600090815260086020526040902060010154600680548792908110612e9057fe5b9060005260206000209060020201600101819055505b856001600160a01b03167f78800d7333b8d0174a0845569e3913b7ce4a3c03ca444dd9904172fc14f2fdad868360405180838152602001826002811115612ee957fe5b60ff1681526020019250505060405180910390a250600195945050505050565b3360009081526020819052604081206001015460e01b600160e11b90811614612f3157600080fd5b6d7265676973746572536368656d6560901b60005b6005548110156130365760058181548110612f5d57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab291339185908110612f9057fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015612ff957600080fd5b505af115801561300d573d6000803e3d6000fd5b505050506040513d602081101561302357600080fd5b505161302e57600080fd5b600101612f46565b60015484906001600160a01b0380831691161461305257600080fd5b61305a6138d1565b506001600160a01b03881660009081526020818152604080832081518083018352815481526001918201546001600160e01b031960e091821b16828601908152338752948690529290942001549151891891901b1916601f60e01b16156130c057600080fd5b336000908152602081815260409091206001015490820151601f60e01b60e09290921b191616156130f057600080fd5b6001600160a01b0389166000818152602081905260408082208b8155600101805463ffffffff1916600160e01b8c1760e01c1790555133917f546816e99403df442acb68ef69562682a50762c20a3fb6b472f7af9923736cfc91a3600194505050600090505b600654811015611845576006818154811061316d57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d913391859081106131a057fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561320957600080fd5b505af115801561321d573d6000803e3d6000fd5b505050506040513d602081101561323357600080fd5b505161323e57600080fd5b600101613156565b6006818154811061114857fe5b3360009081526020819052604081206001015460e01b600160e01b9081161461327b57600080fd5b6d36b4b73a2932b83aba30ba34b7b760911b60005b60055481101561338057600581815481106132a757fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab2913391859081106132da57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561334357600080fd5b505af1158015613357573d6000803e3d6000fd5b505050506040513d602081101561336d57600080fd5b505161337857600080fd5b600101613290565b60015484906001600160a01b0380831691161461339c57600080fd5b6040805188815290516001600160a01b0388169133917f837f2931e3df0592458212be4e470025f197feb7a8e39deb5b7f1f1d42e6f2629181900360200190a3600354604080516340c10f1960e01b81526001600160a01b038981166004830152602482018b9052915191909216916340c10f199160448083019260209291908290030181600087803b15801561343257600080fd5b505af1158015613446573d6000803e3d6000fd5b505050506040513d602081101561345c57600080fd5b5051935050600090505b600654811015611b1c576006818154811061347d57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d913391859081106134b057fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561351957600080fd5b505af115801561352d573d6000803e3d6000fd5b505050506040513d602081101561354357600080fd5b505161354e57600080fd5b600101613466565b60015460009082906001600160a01b0380831691161461357557600080fd5b6001600160a01b03841660009081526007602052604090205460ff16806122ab57505050506001600160a01b031660009081526008602052604090205460ff1690565b3360009081526020819052604081206001015460e01b600160e01b908116146135e057600080fd5b7f65787465726e616c546f6b656e5472616e7366657246726f6d0000000000000060005b6005548110156136f4576005818154811061361b57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061364e57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156136b757600080fd5b505af11580156136cb573d6000803e3d6000fd5b505050506040513d60208110156136e157600080fd5b50516136ec57600080fd5b600101613604565b60015484906001600160a01b0380831691161461371057600080fd5b60015460408051635bab6ad160e11b81526001600160a01b038c811660048301528b811660248301528a81166044830152606482018a90529151919092169163b756d5a29160848083019260209291908290030181600087803b15801561377657600080fd5b505af115801561378a573d6000803e3d6000fd5b505050506040513d60208110156137a057600080fd5b5051935050600090505b60065481101561389a57600681815481106137c157fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d913391859081106137f457fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561385d57600080fd5b505af1158015613871573d6000803e3d6000fd5b505050506040513d602081101561388757600080fd5b505161389257600080fd5b6001016137aa565b505095945050505050565b6001600160a01b03811660009081526020819052604090206001015460e01b600160e01b161515919050565b604080518082019091526000808252602082015290565b815481835581811115613914576002028160020283600052602060002091820191016139149190613919565b505050565b61394891905b808211156139445780546001600160a01b03191681556000600182015560020161391f565b5090565b9056fea265627a7a72315820a3c13011e9290449e52fc4816400e8b331ad03e97218d4ae7a54ba286ec7251564736f6c63430005100032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806389ae1c901161010f578063e08738da116100a2578063e8c98b2211610071578063e8c98b221461083e578063eaf994b21461085b578063f76488be1461088f578063fb4856a2146108bd576101e5565b8063e08738da1461078e578063e1758bd8146107bc578063e4537a74146107c4578063e869d45f146107fa576101e5565b8063b9a04cdd116100de578063b9a04cdd1461057f578063c9b62eb1146105bb578063d1b7089a14610634578063db6149ce14610746576101e5565b806389ae1c90146104d85780638da03997146104e05780639b51e35a146105065780639be2faed14610551576101e5565b806351803cd8116101875780636c525b13116101565780636c525b13146104195780636e94d2781461043f578063814784f614610473578063824f2f1f14610499576101e5565b806351803cd81461036d5780635aef7de6146103a9578063634965da146103b15780636407e432146103e5576101e5565b80633a02263c116101c35780633a02263c146102ad57806342427bf8146102d15780634422d372146102ff5780634f52b5be1461033f576101e5565b8063039de01d146101ea578063177eebb01461022c5780631c4d56081461026d575b600080fd5b6102186004803603604081101561020057600080fd5b506001600160a01b0381358116916020013516610903565b604080519115158252519081900360200190f35b6102526004803603602081101561024257600080fd5b50356001600160a01b0316610c09565b60408051921515835260208301919091528051918290030190f35b61029b6004803603604081101561028357600080fd5b506001600160a01b0381358116916020013516610c28565b60408051918252519081900360200190f35b6102b5610c6a565b604080516001600160a01b039092168252519081900360200190f35b610218600480360360408110156102e757600080fd5b506001600160a01b0381358116916020013516610c79565b61031c6004803603602081101561031557600080fd5b503561113b565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6102186004803603604081101561035557600080fd5b506001600160a01b0381358116916020013516611170565b6102186004803603608081101561038357600080fd5b506001600160a01b0381358116916020810135821691604082013591606001351661156b565b6102b561184f565b610218600480360360608110156103c757600080fd5b508035906001600160a01b036020820135811691604001351661185e565b610218600480360360608110156103fb57600080fd5b508035906001600160a01b0360208201358116916040013516611b25565b6102186004803603602081101561042f57600080fd5b50356001600160a01b0316611e24565b6102186004803603606081101561045557600080fd5b508035906001600160a01b0360208201358116916040013516611eab565b6102526004803603602081101561048957600080fd5b50356001600160a01b03166121ae565b6104bf600480360360208110156104af57600080fd5b50356001600160a01b03166121cd565b6040805192835260208301919091528051918290030190f35b6102b56121ff565b6102b5600480360360208110156104f657600080fd5b50356001600160a01b031661220e565b6105346004803603604081101561051c57600080fd5b506001600160a01b0381358116916020013516612240565b604080516001600160e01b03199092168252519081900360200190f35b6102186004803603604081101561056757600080fd5b506001600160a01b0381358116916020013516612283565b6102186004803603608081101561059557600080fd5b506001600160a01b038135811691602081013582169160408201359160600135166122b3565b610218600480360360408110156105d157600080fd5b8101906020810181356401000000008111156105ec57600080fd5b8201836020820111156105fe57600080fd5b8035906020019184600183028401116401000000008311171561062057600080fd5b9193509150356001600160a01b0316612585565b6106c36004803603608081101561064a57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561067557600080fd5b82018360208201111561068757600080fd5b803590602001918460018302840111640100000000831117156106a957600080fd5b91935091506001600160a01b038135169060200135612675565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561070a5781810151838201526020016106f2565b50505050905090810190601f1680156107375780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b61076c6004803603602081101561075c57600080fd5b50356001600160a01b0316612a46565b604080519283526001600160e01b031990911660208301528051918290030190f35b61029b600480360360408110156107a457600080fd5b506001600160a01b0381358116916020013516612a62565b6102b5612b2e565b610218600480360360608110156107da57600080fd5b506001600160a01b03813581169160208101359160409091013516612b3d565b6102186004803603608081101561081057600080fd5b506001600160a01b0381358116916020810135916001600160e01b0319604083013516916060013516612f09565b61031c6004803603602081101561085457600080fd5b5035613246565b6102186004803603606081101561087157600080fd5b508035906001600160a01b0360208201358116916040013516613253565b610218600480360360408110156108a557600080fd5b506001600160a01b0381358116916020013516613556565b610218600480360360a08110156108d357600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013591608090910135166135b8565b3360009081526020819052604081206001015460e01b600160e11b9081161461092b57600080fd5b6f756e7265676973746572536368656d6560801b60005b600554811015610a32576005818154811061095957fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061098c57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156109f557600080fd5b505af1158015610a09573d6000803e3d6000fd5b505050506040513d6020811015610a1f57600080fd5b5051610a2a57600080fd5b600101610942565b60015484906001600160a01b03808316911614610a4e57600080fd5b610a57866138a5565b610a645760009350610b0b565b336000908152602081905260408082206001908101546001600160a01b038a168452919092209091015460e091821b19911b16601f60e01b1615610aa757600080fd5b6040516001600160a01b0387169033907f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf90600090a36001600160a01b03861660009081526020819052604081209081556001908101805463ffffffff1916905593505b50600090505b600654811015610c015760068181548110610b2857fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d91339185908110610b5b57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015610bc457600080fd5b505af1158015610bd8573d6000803e3d6000fd5b505050506040513d6020811015610bee57600080fd5b5051610bf957600080fd5b600101610b11565b505092915050565b6007602052600090815260409020805460019091015460ff9091169082565b60015460009082906001600160a01b03808316911614610c4757600080fd5b6001600160a01b03841660009081526020819052604090205491505b5092915050565b6004546001600160a01b031681565b3360009081526020819052604081206001015460e01b600160e31b90811614610ca157600080fd5b60015482906001600160a01b03808316911614610cbd57600080fd5b6004546001600160a01b031615610cd357600080fd5b6001600160a01b038416610ce657600080fd5b600480546001600160a01b0319166001600160a01b0386811691821783556001546040805163f2fde38b60e01b815294850193909352915191169163f2fde38b91602480830192600092919082900301818387803b158015610d4757600080fd5b505af1158015610d5b573d6000803e3d6000fd5b50505050836001600160a01b0316600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610db757600080fd5b505afa158015610dcb573d6000803e3d6000fd5b505050506040513d6020811015610de157600080fd5b50516001600160a01b031614610df657600080fd5b60025460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015610e3a57600080fd5b505afa158015610e4e573d6000803e3d6000fd5b505050506040513d6020811015610e6457600080fd5b50516001600160a01b03161415610f72576002546040805163f2fde38b60e01b81526001600160a01b0387811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015610ec357600080fd5b505af1158015610ed7573d6000803e3d6000fd5b50505050836001600160a01b0316600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3357600080fd5b505afa158015610f47573d6000803e3d6000fd5b505050506040513d6020811015610f5d57600080fd5b50516001600160a01b031614610f7257600080fd5b60035460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015610fb657600080fd5b505afa158015610fca573d6000803e3d6000fd5b505050506040513d6020811015610fe057600080fd5b50516001600160a01b031614156110ee576003546040805163f2fde38b60e01b81526001600160a01b0387811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b15801561103f57600080fd5b505af1158015611053573d6000803e3d6000fd5b50505050836001600160a01b0316600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110af57600080fd5b505afa1580156110c3573d6000803e3d6000fd5b505050506040513d60208110156110d957600080fd5b50516001600160a01b0316146110ee57600080fd5b600454604080516001600160a01b039290921682525130917fdb7cbacf8df312d794506c0cc9af07f64d29ca075796ea2e950a3832cc9a63dd919081900360200190a25060019392505050565b6005818154811061114857fe5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b3360009081526020819052604081206001015460e01b600160e21b9081161461119857600080fd5b60015482906001600160a01b038083169116146111b457600080fd5b6111bc6138d1565b6111c46138d1565b6000866001600160a01b031663e2b0caef6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561120157600080fd5b505af1158015611215573d6000803e3d6000fd5b505050506040513d602081101561122b57600080fd5b5051905060008082600281111561123e57fe5b14806112555750600282600281111561125357fe5b145b15611399576001600160a01b0388166000908152600760209081526040918290208251808401909352805460ff16158015845260019091015491830191909152909450611399576001600580549050038460200151101561135a576005805460001981019081106112c257fe5b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101548183015290850151600580549295508592909190811061130a57fe5b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001948501558781015187519092168352600790526040909120909101555b600580549061136d9060001983016138e8565b50506001600160a01b0387166000908152600760205260408120805460ff191681556001908101919091555b60018260028111156113a757fe5b14806113be575060028260028111156113bc57fe5b145b15611502576001600160a01b0388166000908152600860209081526040918290208251808401909352805460ff1615801584526001909101549183019190915290945061150257600160068054905003846020015110156114c35760068054600019810190811061142b57fe5b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101548183015290850151600680549295508592909190811061147357fe5b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001948501558781015187519092168352600890526040909120909101555b60068054906114d69060001983016138e8565b50506001600160a01b0387166000908152600860205260408120805460ff191681556001908101919091555b80156115605760208401516001600160a01b038916907fcdf1a50ea6b7de555bd409f8a4a53ea43c6dc6b4caa961889da9e005f21bbaa990600085600281111561154857fe5b60408051938452911460208301528051918290030190a25b979650505050505050565b3360009081526020819052604081206001015460e01b600160e01b9081161461159357600080fd5b7f65787465726e616c546f6b656e496e637265617365417070726f76616c00000060005b6005548110156116a757600581815481106115ce57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061160157fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561166a57600080fd5b505af115801561167e573d6000803e3d6000fd5b505050506040513d602081101561169457600080fd5b505161169f57600080fd5b6001016115b7565b60015484906001600160a01b038083169116146116c357600080fd5b6001546040805163ab751f7160e01b81526001600160a01b038b811660048301528a81166024830152604482018a90529151919092169163ab751f719160648083019260209291908290030181600087803b15801561172157600080fd5b505af1158015611735573d6000803e3d6000fd5b505050506040513d602081101561174b57600080fd5b5051935050600090505b600654811015611845576006818154811061176c57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d9133918590811061179f57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561180857600080fd5b505af115801561181c573d6000803e3d6000fd5b505050506040513d602081101561183257600080fd5b505161183d57600080fd5b600101611755565b5050949350505050565b6001546001600160a01b031681565b3360009081526020819052604081206001015460e01b600160e01b9081161461188657600080fd5b6839b2b73222ba3432b960b91b60005b60055481101561198657600581815481106118ad57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab2913391859081106118e057fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561194957600080fd5b505af115801561195d573d6000803e3d6000fd5b505050506040513d602081101561197357600080fd5b505161197e57600080fd5b600101611896565b60015484906001600160a01b038083169116146119a257600080fd5b6001546040805163658b6a5160e11b8152600481018a90526001600160a01b0389811660248301529151919092169163cb16d4a29160448083019260209291908290030181600087803b1580156119f857600080fd5b505af1158015611a0c573d6000803e3d6000fd5b505050506040513d6020811015611a2257600080fd5b5051935050600090505b600654811015611b1c5760068181548110611a4357fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d91339185908110611a7657fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611adf57600080fd5b505af1158015611af3573d6000803e3d6000fd5b505050506040513d6020811015611b0957600080fd5b5051611b1457600080fd5b600101611a2c565b50509392505050565b3360009081526020819052604081206001015460e01b600160e01b90811614611b4d57600080fd5b696d696e74546f6b656e7360b01b60005b600554811015611c4e5760058181548110611b7557fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab291339185908110611ba857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611c1157600080fd5b505af1158015611c25573d6000803e3d6000fd5b505050506040513d6020811015611c3b57600080fd5b5051611c4657600080fd5b600101611b5e565b60015484906001600160a01b03808316911614611c6a57600080fd5b6040805188815290516001600160a01b0388169133917f21f9c9a1a1f9a311a50f15fec5c1faa9e21fc9edf964f0fdecba5bd490484c5e9181900360200190a3600254604080516340c10f1960e01b81526001600160a01b038981166004830152602482018b9052915191909216916340c10f199160448083019260209291908290030181600087803b158015611d0057600080fd5b505af1158015611d14573d6000803e3d6000fd5b505050506040513d6020811015611d2a57600080fd5b5051935050600090505b600654811015611b1c5760068181548110611d4b57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d91339185908110611d7e57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611de757600080fd5b505af1158015611dfb573d6000803e3d6000fd5b505050506040513d6020811015611e1157600080fd5b5051611e1c57600080fd5b600101611d34565b60015460009082906001600160a01b03808316911614611e4357600080fd5b611e4c336138a5565b611e595760009150611ea5565b33600081815260208190526040808220828155600101805463ffffffff191690555182917f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf91a3600191505b50919050565b3360009081526020819052604081206001015460e01b600160e01b90811614611ed357600080fd5b6d313ab9372932b83aba30ba34b7b760911b60005b600554811015611fd85760058181548110611eff57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab291339185908110611f3257fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611f9b57600080fd5b505af1158015611faf573d6000803e3d6000fd5b505050506040513d6020811015611fc557600080fd5b5051611fd057600080fd5b600101611ee8565b60015484906001600160a01b03808316911614611ff457600080fd5b6040805188815290516001600160a01b0388169133917f186d8887e1b22f9d9b16849c36baa748950d09d9c9b67a4a6ea140eaad00c21c9181900360200190a360035460408051632770a7eb60e21b81526001600160a01b038981166004830152602482018b905291519190921691639dc29fac9160448083019260209291908290030181600087803b15801561208a57600080fd5b505af115801561209e573d6000803e3d6000fd5b505050506040513d60208110156120b457600080fd5b5051935050600090505b600654811015611b1c57600681815481106120d557fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d9133918590811061210857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561217157600080fd5b505af1158015612185573d6000803e3d6000fd5b505050506040513d602081101561219b57600080fd5b50516121a657600080fd5b6001016120be565b6008602052600090815260409020805460019091015460ff9091169082565b600154600090819083906001600160a01b038083169116146121ee57600080fd5b600554600654909350915050915091565b6003546001600160a01b031681565b60015460009082906001600160a01b0380831691161461222d57600080fd5b50506003546001600160a01b0316919050565b60015460009082906001600160a01b0380831691161461225f57600080fd5b5050506001600160a01b031660009081526020819052604090206001015460e01b90565b60015460009082906001600160a01b038083169116146122a257600080fd5b6122ab846138a5565b949350505050565b3360009081526020819052604081206001015460e01b600160e01b908116146122db57600080fd5b7432bc3a32b93730b62a37b5b2b72a3930b739b332b960591b60005b6005548110156123e7576005818154811061230e57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061234157fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156123aa57600080fd5b505af11580156123be573d6000803e3d6000fd5b505050506040513d60208110156123d457600080fd5b50516123df57600080fd5b6001016122f7565b60015484906001600160a01b0380831691161461240357600080fd5b6001546040805163dab0efff60e01b81526001600160a01b038b811660048301528a81166024830152604482018a90529151919092169163dab0efff9160648083019260209291908290030181600087803b15801561246157600080fd5b505af1158015612475573d6000803e3d6000fd5b505050506040513d602081101561248b57600080fd5b5051935050600090505b60065481101561184557600681815481106124ac57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d913391859081106124df57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561254857600080fd5b505af115801561255c573d6000803e3d6000fd5b505050506040513d602081101561257257600080fd5b505161257d57600080fd5b600101612495565b3360009081526020819052604081206001015460e01b600160e41b908116146125ad57600080fd5b60015482906001600160a01b038083169116146125c957600080fd5b600154604051632242b11b60e21b8152602060048201908152602482018790526001600160a01b039092169163890ac46c91889188918190604401848480828437600081840152601f19601f8201169050808301925050509350505050602060405180830381600087803b15801561264057600080fd5b505af1158015612654573d6000803e3d6000fd5b505050506040513d602081101561266a57600080fd5b505195945050505050565b3360009081526020819052604081206001015460609060e01b600160e41b908116146126a057600080fd5b6a19d95b995c9a58d0d85b1b60aa1b60005b6005548110156127a257600581815481106126c957fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab2913391859081106126fc57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561276557600080fd5b505af1158015612779573d6000803e3d6000fd5b505050506040513d602081101561278f57600080fd5b505161279a57600080fd5b6001016126b2565b60015486906001600160a01b038083169116146127be57600080fd5b60015460405163057e2c8b60e31b81526001600160a01b038c811660048301908152604483018a9052606060248401908152606484018d90529190931692632bf16458928e928e928e928d9290608401858580828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561284c57600080fd5b505af1158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604090815281101561288957600080fd5b8151602083018051604051929492938301929190846401000000008211156128b057600080fd5b9083019060208201858111156128c557600080fd5b82516401000000008111828201881017156128df57600080fd5b82525081516020918201929091019080838360005b8381101561290c5781810151838201526020016128f4565b50505050905090810190601f1680156129395780820380516001836020036101000a031916815260200191505b506040525050509450945050600090505b600654811015612a3a576006818154811061296157fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d9133918590811061299457fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156129fd57600080fd5b505af1158015612a11573d6000803e3d6000fd5b505050506040513d6020811015612a2757600080fd5b5051612a3257600080fd5b60010161294a565b50509550959350505050565b6000602081905290815260409020805460019091015460e01b82565b6000612a6c6138d1565b506001600160a01b0383166000908152600760209081526040918290208251808401909352805460ff16158015845260019091015491830191909152612ad7576005816020015181548110612abd57fe5b906000526020600020906002020160010154915050612b28565b506001600160a01b0383166000908152600860209081526040918290208251808401909352805460ff16158015845260019091015491830191909152610c63576006816020015181548110612abd57fe5b92915050565b6002546001600160a01b031681565b3360009081526020819052604081206001015460e01b600160e21b90811614612b6557600080fd5b60015482906001600160a01b03808316911614612b8157600080fd5b6000856001600160a01b031663e2b0caef6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612bbe57600080fd5b505af1158015612bd2573d6000803e3d6000fd5b505050506040513d6020811015612be857600080fd5b505190506000816002811115612bfa57fe5b1480612c1157506002816002811115612c0f57fe5b145b15612d49576001600160a01b03861660009081526007602052604090205460ff16612d08576040805180820182526001600160a01b0388811680835260208084018a81526005805460018082018355600083815297517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600290930292830180546001600160a01b031916919098161790965591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db190920191909155855180870187528481529054600019018183019081529285526007909152939092209251835460ff19169015151783559051910155612d49565b6001600160a01b038616600090815260076020526040902060010154600580548792908110612d3357fe5b9060005260206000209060020201600101819055505b6001816002811115612d5757fe5b1480612d6e57506002816002811115612d6c57fe5b145b15612ea6576001600160a01b03861660009081526008602052604090205460ff16612e65576040805180820182526001600160a01b0388811680835260208084018a81526006805460018082018355600083815297517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600290930292830180546001600160a01b031916919098161790965591517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090920191909155855180870187528481529054600019018183019081529285526008909152939092209251835460ff19169015151783559051910155612ea6565b6001600160a01b038616600090815260086020526040902060010154600680548792908110612e9057fe5b9060005260206000209060020201600101819055505b856001600160a01b03167f78800d7333b8d0174a0845569e3913b7ce4a3c03ca444dd9904172fc14f2fdad868360405180838152602001826002811115612ee957fe5b60ff1681526020019250505060405180910390a250600195945050505050565b3360009081526020819052604081206001015460e01b600160e11b90811614612f3157600080fd5b6d7265676973746572536368656d6560901b60005b6005548110156130365760058181548110612f5d57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab291339185908110612f9057fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015612ff957600080fd5b505af115801561300d573d6000803e3d6000fd5b505050506040513d602081101561302357600080fd5b505161302e57600080fd5b600101612f46565b60015484906001600160a01b0380831691161461305257600080fd5b61305a6138d1565b506001600160a01b03881660009081526020818152604080832081518083018352815481526001918201546001600160e01b031960e091821b16828601908152338752948690529290942001549151891891901b1916601f60e01b16156130c057600080fd5b336000908152602081815260409091206001015490820151601f60e01b60e09290921b191616156130f057600080fd5b6001600160a01b0389166000818152602081905260408082208b8155600101805463ffffffff1916600160e01b8c1760e01c1790555133917f546816e99403df442acb68ef69562682a50762c20a3fb6b472f7af9923736cfc91a3600194505050600090505b600654811015611845576006818154811061316d57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d913391859081106131a057fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561320957600080fd5b505af115801561321d573d6000803e3d6000fd5b505050506040513d602081101561323357600080fd5b505161323e57600080fd5b600101613156565b6006818154811061114857fe5b3360009081526020819052604081206001015460e01b600160e01b9081161461327b57600080fd5b6d36b4b73a2932b83aba30ba34b7b760911b60005b60055481101561338057600581815481106132a757fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab2913391859081106132da57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561334357600080fd5b505af1158015613357573d6000803e3d6000fd5b505050506040513d602081101561336d57600080fd5b505161337857600080fd5b600101613290565b60015484906001600160a01b0380831691161461339c57600080fd5b6040805188815290516001600160a01b0388169133917f837f2931e3df0592458212be4e470025f197feb7a8e39deb5b7f1f1d42e6f2629181900360200190a3600354604080516340c10f1960e01b81526001600160a01b038981166004830152602482018b9052915191909216916340c10f199160448083019260209291908290030181600087803b15801561343257600080fd5b505af1158015613446573d6000803e3d6000fd5b505050506040513d602081101561345c57600080fd5b5051935050600090505b600654811015611b1c576006818154811061347d57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d913391859081106134b057fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561351957600080fd5b505af115801561352d573d6000803e3d6000fd5b505050506040513d602081101561354357600080fd5b505161354e57600080fd5b600101613466565b60015460009082906001600160a01b0380831691161461357557600080fd5b6001600160a01b03841660009081526007602052604090205460ff16806122ab57505050506001600160a01b031660009081526008602052604090205460ff1690565b3360009081526020819052604081206001015460e01b600160e01b908116146135e057600080fd5b7f65787465726e616c546f6b656e5472616e7366657246726f6d0000000000000060005b6005548110156136f4576005818154811061361b57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061364e57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156136b757600080fd5b505af11580156136cb573d6000803e3d6000fd5b505050506040513d60208110156136e157600080fd5b50516136ec57600080fd5b600101613604565b60015484906001600160a01b0380831691161461371057600080fd5b60015460408051635bab6ad160e11b81526001600160a01b038c811660048301528b811660248301528a81166044830152606482018a90529151919092169163b756d5a29160848083019260209291908290030181600087803b15801561377657600080fd5b505af115801561378a573d6000803e3d6000fd5b505050506040513d60208110156137a057600080fd5b5051935050600090505b60065481101561389a57600681815481106137c157fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d913391859081106137f457fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561385d57600080fd5b505af1158015613871573d6000803e3d6000fd5b505050506040513d602081101561388757600080fd5b505161389257600080fd5b6001016137aa565b505095945050505050565b6001600160a01b03811660009081526020819052604090206001015460e01b600160e01b161515919050565b604080518082019091526000808252602082015290565b815481835581811115613914576002028160020283600052602060002091820191016139149190613919565b505050565b61394891905b808211156139445780546001600160a01b03191681556000600182015560020161391f565b5090565b9056fea265627a7a72315820a3c13011e9290449e52fc4816400e8b331ad03e97218d4ae7a54ba286ec7251564736f6c63430005100032",
  "sourceMap": "410:20743:52:-;;;3076:264;8:9:-1;5:2;;;30:1;27;20:12;5:2;3076:264:52;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3076:264:52;3122:6;:16;;-1:-1:-1;;;;;;3122:16:52;-1:-1:-1;;;;;3122:16:52;;;;;;;;;;;3162:20;;;-1:-1:-1;;;3162:20:52;;;;:6;;;;;:18;;:20;;;;;3076:264;;3162:20;;;;;;;;:6;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;3162:20:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3162:20:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3162:20:52;3148:11;:34;;-1:-1:-1;;;;;;3148:34:52;-1:-1:-1;;;;;3148:34:52;;;;;;-1:-1:-1;3211:6:52;:25;;;-1:-1:-1;;;3211:25:52;;;;:6;;;;;:23;;:25;;;;;3162:20;;3211:25;;;;;;;:6;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;3211:25:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3211:25:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3211:25:52;3192:16;:44;;-1:-1:-1;;;;;;3192:44:52;-1:-1:-1;;;;;3192:44:52;;;;;;;;;-1:-1:-1;3268:65:52;;;;;;;;-1:-1:-1;3268:65:52;;;-1:-1:-1;;;3211:25:52;3268:65;;;;;;3254:10;3246:19;;;;;;;;:87;;;;;;-1:-1:-1;3246:87:52;;;;;;-1:-1:-1;;3246:87:52;-1:-1:-1;3246:87:52;;;;;;;;;;-1:-1:-1;;;;410:20743:52;;;;",
  "deployedSourceMap": "410:20743:52:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;410:20743:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3459:8;;;8236:638;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8236:638:52;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2027:78;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2027:78:52;-1:-1:-1;;;;;2027:78:52;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;19310:188;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19310:188:52;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1598:28;;;:::i;:::-;;;;-1:-1:-1;;;;;1598:28:52;;;;;;;;;;;;;;14008:918;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14008:918:52;;;;;;;;;;:::i;1723:46::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1723:46:52;;:::i;:::-;;;;-1:-1:-1;;;;;1723:46:52;;;;;;;;;;;;;;;;;;;;;;11373:2405;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11373:2405:52;;;;;;;;;;:::i;18008:347::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;18008:347:52;;;;;;;;;;;;;;;;;;;;;;:::i;1406:20::-;;;:::i;15868:274::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15868:274:52;;;-1:-1:-1;;;;;15868:274:52;;;;;;;;;;;;:::i;6371:328::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6371:328:52;;;-1:-1:-1;;;;;6371:328:52;;;;;;;;;;;;:::i;8986:298::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8986:298:52;-1:-1:-1;;;;;8986:298:52;;:::i;5858:324::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5858:324:52;;;-1:-1:-1;;;;;5858:324:52;;;;;;;;;;;;:::i;2220:79::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2220:79:52;-1:-1:-1;;;;;2220:79:52;;:::i;20411:229::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20411:229:52;-1:-1:-1;;;;;20411:229:52;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1465:34;;;:::i;18984:149::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18984:149:52;-1:-1:-1;;;;;18984:149:52;;:::i;19504:189::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19504:189:52;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;19504:189:52;;;;;;;;;;;;;;;19139:165;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19139:165:52;;;;;;;;;;:::i;16426:329::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;16426:329:52;;;;;;;;;;;;;;;;;;;;;;:::i;18612:225::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18612:225:52;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;18612:225:52;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18612:225:52;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;18612:225:52;;-1:-1:-1;18612:225:52;-1:-1:-1;18612:225:52;-1:-1:-1;;;;;18612:225:52;;:::i;15357:317::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;15357:317:52;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;15357:317:52;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;15357:317:52;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;15357:317:52;;-1:-1:-1;15357:317:52;-1:-1:-1;;;;;;15357:317:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15357:317:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1360:39;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1360:39:52;-1:-1:-1;;;;;1360:39:52;;:::i;:::-;;;;;;;-1:-1:-1;;;;;;1360:39:52;;;;;;;;;;;;;;;;;19699:509;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19699:509:52;;;;;;;;;;:::i;1432:27::-;;;:::i;9533:1601::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9533:1601:52;;;;;;;;;;;;;;;;;:::i;6976:1111::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;6976:1111:52;;;;;;;;;;-1:-1:-1;;;;;;6976:1111:52;;;;;;;;;;;:::i;1867:47::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1867:47:52;;:::i;5303:318::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5303:318:52;;;-1:-1:-1;;;;;5303:318:52;;;;;;;;;;;;:::i;20646:340::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20646:340:52;;;;;;;;;;:::i;17245:384::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;17245:384:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8236:638::-;3703:10;8424:4;3695:19;;;;;;;;;;:31;;;3749:18;3695:31;-1:-1:-1;;;3695:50:52;;;:72;3687:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;8403:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;8488:28;8508:7;8488:19;:28::i;:::-;8484:80;;8548:5;8541:12;;;;8484:80;8702:10;8738:1;8694:19;;;;;;;;;;;:31;;;;;-1:-1:-1;;;;;8663:16:52;;;;;;;;:28;;;;8731:9;8694:31;;;8693:32;8663:28;;:63;-1:-1:-1;;;8643:84:52;:97;8635:106;;;;;;8776:37;;-1:-1:-1;;;;;8776:37:52;;;8793:10;;8776:37;;;;;-1:-1:-1;;;;;8830:16:52;;:7;:16;;;;;;;;;;8823:23;;;-1:-1:-1;8823:23:52;;;;;-1:-1:-1;;8823:23:52;;;-1:-1:-1;;5066:1:52;4708;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;;3778:1;;8236:638;;;;:::o;2027:78::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19310:188::-;5048:6;;19434:7;;19404;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;-1:-1:-1;;;;;19464:16:52;;:7;:16;;;;;;;;;;:27;;-1:-1:-1;5066:1:52;19310:188;;;;;:::o;1598:28::-;;;-1:-1:-1;;;;;1598:28:52;;:::o;14008:918::-;4003:10;14160:4;3995:19;;;;;;;;;;:31;;;4049:18;3995:31;-1:-1:-1;;;3995:50:52;;;:72;3987:81;;;;;;5048:6;;14138:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;14188:13;;-1:-1:-1;;;;;14188:13:52;:27;14180:36;;;;;;-1:-1:-1;;;;;14289:28:52;;14281:37;;;;;;14328:13;:30;;-1:-1:-1;;;;;;14328:30:52;-1:-1:-1;;;;;14328:30:52;;;;;;;;-1:-1:-1;14368:6:52;:40;;;-1:-1:-1;;;14368:40:52;;;;;;;;;;;:6;;;-1:-1:-1;;14368:40:52;;;;;-1:-1:-1;;14368:40:52;;;;;;;-1:-1:-1;14368:6:52;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;14368:40:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;14426:6:52;:14;;;-1:-1:-1;;;14426:14:52;;;;-1:-1:-1;;;;;14426:32:52;;;;-1:-1:-1;14426:6:52;;;;-1:-1:-1;;;14426:14:52;;;;;;;;;;;;;;:6;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;14426:14:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14426:14:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14426:14:52;-1:-1:-1;;;;;14426:32:52;;14418:41;;;;;;14473:11;;:19;;;-1:-1:-1;;;14473:19:52;;;;14504:4;;-1:-1:-1;;;;;14473:11:52;;-1:-1:-1;;14473:19:52;;;;;;;;;;;;;;:11;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;14473:19:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14473:19:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14473:19:52;-1:-1:-1;;;;;14473:36:52;;14469:172;;;14525:11;;:45;;;-1:-1:-1;;;14525:45:52;;-1:-1:-1;;;;;14525:45:52;;;;;;;;;:11;;;;;-1:-1:-1;;14525:45:52;;;;;-1:-1:-1;;14525:45:52;;;;;;;-1:-1:-1;14525:11:52;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;14525:45:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;14592:11:52;;:19;;;-1:-1:-1;;;14592:19:52;;;;-1:-1:-1;;;;;14592:37:52;;;;-1:-1:-1;14592:11:52;;;;-1:-1:-1;;;14592:19:52;;;;;;;;;;;;;;:11;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;14592:19:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14592:19:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14592:19:52;-1:-1:-1;;;;;14592:37:52;;14584:46;;;;;;14654:16;;:24;;;-1:-1:-1;;;14654:24:52;;;;14690:4;;-1:-1:-1;;;;;14654:16:52;;-1:-1:-1;;14654:24:52;;;;;;;;;;;;;;:16;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;14654:24:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14654:24:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14654:24:52;-1:-1:-1;;;;;14654:41:52;;14650:187;;;14711:16;;:50;;;-1:-1:-1;;;14711:50:52;;-1:-1:-1;;;;;14711:50:52;;;;;;;;;:16;;;;;-1:-1:-1;;14711:50:52;;;;;-1:-1:-1;;14711:50:52;;;;;;;-1:-1:-1;14711:16:52;:50;;;5:2:-1;;;;30:1;27;20:12;5:2;14711:50:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;14783:16:52;;:24;;;-1:-1:-1;;;14783:24:52;;;;-1:-1:-1;;;;;14783:42:52;;;;-1:-1:-1;14783:16:52;;;;-1:-1:-1;;;14783:24:52;;;;;;;;;;;;;;:16;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;14783:24:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14783:24:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14783:24:52;-1:-1:-1;;;;;14783:42:52;;14775:51;;;;;;14884:13;;14851:47;;;-1:-1:-1;;;;;14884:13:52;;;14851:47;;;14877:4;;14851:47;;;;;;;;;;-1:-1:-1;14915:4:52;;14008:918;-1:-1:-1;;;14008:918:52:o;1723:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1723:46:52;;;;-1:-1:-1;1723:46:52;:::o;11373:2405::-;3857:10;11534:4;3849:19;;;;;;;;;;:31;;;3903:18;3849:31;-1:-1:-1;;;3849:50:52;;;:72;3841:81;;;;;;5048:6;;11513:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;11554:56;;:::i;:::-;11620:40;;:::i;:::-;11670;11739:17;-1:-1:-1;;;;;11713:49:52;;:51;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11713:51:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11713:51:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11713:51:52;;-1:-1:-1;11774:11:52;;11809:4;:47;;;;;;;;;11808:120;;;-1:-1:-1;11881:46:52;11873:4;:54;;;;;;;;;11808:120;11804:852;;;-1:-1:-1;;;;;11971:47:52;;;;;;:28;:47;;;;;;;;;11944:74;;;;;;;;;;;;;;;;;-1:-1:-1;11944:74:52;;;;;;;;;;;;;-1:-1:-1;12032:614:52;;12158:1;12130:20;:27;;;;:29;12097:24;:30;;;:62;12093:389;;;12202:20;12223:27;;-1:-1:-1;;12223:29:52;;;12202:51;;;;;;;;;;;;;;;12183:70;;;;;;;;;12202:51;;;;;;12183:70;;-1:-1:-1;;;;;12183:70:52;;;-1:-1:-1;12183:70:52;;;;;;12296:30;;;;12275:20;:52;;12183:70;;-1:-1:-1;12183:70:52;;12275:20;;12296:30;12275:52;;;;;;;;;;;;;;:71;;:52;;;;;;:71;;-1:-1:-1;;;;;;12275:71:52;-1:-1:-1;;;;;12275:71:52;;;;;;;;;;-1:-1:-1;12275:71:52;;;;12433:30;;;;12397:26;;12368:56;;;;;:28;:56;;;;;;:62;;;:95;12093:389;12499:20;:29;;;;;-1:-1:-1;;12499:29:52;;;:::i;:::-;-1:-1:-1;;;;;;;12553:47:52;;;;;;:28;:47;;;;;12546:54;;-1:-1:-1;;12546:54:52;;;-1:-1:-1;12546:54:52;;;;;;;12032:614;12678:40;12670:4;:48;;;;;;;;;12669:121;;;-1:-1:-1;12743:46:52;12735:4;:54;;;;;;;;;12669:121;12665:861;;;-1:-1:-1;;;;;12833:48:52;;;;;;:29;:48;;;;;;;;;12806:75;;;;;;;;;;;;;;;;;-1:-1:-1;12806:75:52;;;;;;;;;;;;;-1:-1:-1;12895:621:52;;13022:1;12993:21;:28;;;;:30;12960:24;:30;;;:63;12956:394;;;13066:21;13088:28;;-1:-1:-1;;13088:30:52;;;13066:53;;;;;;;;;;;;;;;13047:72;;;;;;;;;13066:53;;;;;;13047:72;;-1:-1:-1;;;;;13047:72:52;;;-1:-1:-1;13047:72:52;;;;;;13163:30;;;;13141:21;:53;;13047:72;;-1:-1:-1;13047:72:52;;13141:21;;13163:30;13141:53;;;;;;;;;;;;;;:72;;:53;;;;;;:72;;-1:-1:-1;;;;;;13141:72:52;-1:-1:-1;;;;;13141:72:52;;;;;;;;;;-1:-1:-1;13141:72:52;;;;13301:30;;;;13265:26;;13235:57;;;;;:29;:57;;;;;;:63;;;:96;12956:394;13367:21;:30;;;;;-1:-1:-1;;13367:30:52;;;:::i;:::-;-1:-1:-1;;;;;;;13422:48:52;;;;;;:29;:48;;;;;13415:55;;-1:-1:-1;;13415:55:52;;;-1:-1:-1;13415:55:52;;;;;;;12895:621;13539:6;13535:214;;;13633:30;;;;-1:-1:-1;;;;;13566:172:52;;;;;13685:39;13677:4;:47;;;;;;;;13566:172;;;;;;13677:47;;13566:172;;;;;;;;;;;;;13535:214;13765:6;11373:2405;-1:-1:-1;;;;;;;11373:2405:52:o;18008:347::-;3554:10;18259:4;3546:19;;;;;;;;;;3607:10;3546:31;;3600:18;3546:31;-1:-1:-1;;;3546:50:52;;;:72;3538:81;;;;;;4385:580;4442:11;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;18237:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;18286:6;;:62;;;-1:-1:-1;;;18286:62:52;;-1:-1:-1;;;;;18286:62:52;;;;;;;;;;;;;;;;;;;;;;:6;;;;;-1:-1:-1;;18286:62:52;;;;;;;;;;;;;;-1:-1:-1;18286:6:52;:62;;;5:2:-1;;;;30:1;27;20:12;5:2;18286:62:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18286:62:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18286:62:52;;-1:-1:-1;4708:1:52;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;;3629:1;;18008:347;;;;;;:::o;1406:20::-;;;-1:-1:-1;;;;;1406:20:52;;:::o;15868:274::-;3554:10;16073:4;3546:19;;;;;;;;;;3607:10;3546:31;;3600:18;3546:31;-1:-1:-1;;;3546:50:52;;;:72;3538:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;16051:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;16100:6;;:35;;;-1:-1:-1;;;16100:35:52;;;;;;;;-1:-1:-1;;;;;16100:35:52;;;;;;;;;:6;;;;;:16;;:35;;;;;;;;;;;;;;-1:-1:-1;16100:6:52;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;16100:35:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16100:35:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16100:35:52;;-1:-1:-1;4708:1:52;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;;3629:1;;15868:274;;;;;:::o;6371:328::-;3554:10;6566:4;3546:19;;;;;;;;;;3607:10;3546:31;;3600:18;3546:31;-1:-1:-1;;;3546:50:52;;;:72;3538:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;6545:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;6591:45;;;;;;;;-1:-1:-1;;;;;6591:45:52;;;6602:10;;6591:45;;;;;;;;;6653:11;;:39;;;-1:-1:-1;;;6653:39:52;;-1:-1:-1;;;;;6653:39:52;;;;;;;;;;;;;;;:11;;;;;-1:-1:-1;;6653:39:52;;;;;;;;;;;;;;-1:-1:-1;6653:11:52;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;6653:39:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6653:39:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6653:39:52;;-1:-1:-1;4708:1:52;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;8986:298;5048:6;;9067:4;;9050:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;9087:31;9107:10;9087:19;:31::i;:::-;9083:83;;9150:5;9143:12;;;;9083:83;9190:10;9182:7;:19;;;;;;;;;;;9175:26;;;;;;;-1:-1:-1;;9175:26:52;;;9216:40;9190:10;;9216:40;;;9273:4;9266:11;;5066:1;8986:298;;;;:::o;5858:324::-;3554:10;6054:4;3546:19;;;;;;;;;;3607:10;3546:31;;3600:18;3546:31;-1:-1:-1;;;3546:50:52;;;:72;3538:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;6033:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;6079:42;;;;;;;;-1:-1:-1;;;;;6079:42:52;;;6094:10;;6079:42;;;;;;;;;6138:16;;:37;;;-1:-1:-1;;;6138:37:52;;-1:-1:-1;;;;;6138:37:52;;;;;;;;;;;;;;;:16;;;;;:21;;:37;;;;;;;;;;;;;;-1:-1:-1;6138:16:52;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;6138:37:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6138:37:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6138:37:52;;-1:-1:-1;4708:1:52;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;2220:79;;;;;;;;;;;;;;;;;;;;;;;;:::o;20411:229::-;5048:6;;20537:4;;;;20499:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;20575:20;:27;20604:21;:28;20575:27;;-1:-1:-1;20604:28:52;-1:-1:-1;20411:229:52;;;;:::o;1465:34::-;;;-1:-1:-1;;;;;1465:34:52;;:::o;18984:149::-;5048:6;;19075:7;;19053;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;-1:-1:-1;;19109:16:52;;-1:-1:-1;;;;;19109:16:52;;;-1:-1:-1;18984:149:52:o;19504:189::-;5048:6;;19629;;19599:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;-1:-1:-1;;;;;;;;19658:16:52;:7;:16;;;;;;;;;;-1:-1:-1;19658:28:52;;;;;19504:189::o;19139:165::-;5048:6;;19246:4;;19224:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;19269:28;19289:7;19269:19;:28::i;:::-;19262:35;19139:165;-1:-1:-1;;;;19139:165:52:o;16426:329::-;3554:10;16664:4;3546:19;;;;;;;;;;3607:10;3546:31;;3600:18;3546:31;-1:-1:-1;;;3546:50:52;;;:72;3538:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;16642:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;16691:6;;:57;;;-1:-1:-1;;;16691:57:52;;-1:-1:-1;;;;;16691:57:52;;;;;;;;;;;;;;;;;;;;;;:6;;;;;-1:-1:-1;;16691:57:52;;;;;;;;;;;;;;-1:-1:-1;16691:6:52;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;16691:57:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16691:57:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16691:57:52;;-1:-1:-1;4708:1:52;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;18612:225;4296:10;18773:4;4288:19;;;;;;;;;;:31;;;4342:18;4288:31;-1:-1:-1;;;4288:50:52;;;:72;4280:81;;;;;;5048:6;;18747:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;18804:6;;:26;;-1:-1:-1;;;18804:26:52;;;;;;;;;;;;;;;-1:-1:-1;;;;;18804:6:52;;;;:15;;18820:9;;18804:26;;;;;;18820:9;18804:26;;18820:9;18804:26;1:33:-1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;18804::52;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18804:26:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18804:26:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18804:26:52;;18612:225;-1:-1:-1;;;;;18612:225:52:o;15357:317::-;4151:10;15582:4;4143:19;;;;;;;;;;:31;;;15588:12;;4197:18;4143:31;-1:-1:-1;;;4143:50:52;;;:72;4135:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;15559:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;15623:6;;:44;;-1:-1:-1;;;15623:44:52;;-1:-1:-1;;;;;15623:44:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;;;;;:18;;:44;;15653:5;;15623:44;;;;;;;15653:5;15623:44;;15653:5;15623:44;1:33:-1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;15623:44:52;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15623:44:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15623:44:52;;;;;;39:16:-1;36:1;17:17;2:54;101:4;15623:44:52;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;;;5:11;;2:2;;;29:1;26;19:12;2:2;15623:44:52;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;15623:44:52;;420:4:-1;411:14;;;;15623:44:52;;;;;411:14:-1;15623:44:52;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15623:44:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15616:51;;;;4708:1;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;;4226:1;;15357:317;;;;;;;;:::o;1360:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;19699:509::-;19796:7;19816:40;;:::i;:::-;-1:-1:-1;;;;;;19859:47:52;;;;;;:28;:47;;;;;;;;;19816:90;;;;;;;;;;;;;;;;;-1:-1:-1;19816:90:52;;;;;;;;;;;19917:102;;19965:20;19986:8;:14;;;19965:36;;;;;;;;;;;;;;;;;;:43;;;19958:50;;;;;19917:102;-1:-1:-1;;;;;;20040:48:52;;;;;;:29;:48;;;;;;;;;20029:59;;;;;;;;;;;;;;;;;-1:-1:-1;20029:59:52;;;;;;;;;;;20099:103;;20147:21;20169:8;:14;;;20147:37;;;;;;;19699:509;;;;;:::o;1432:27::-;;;-1:-1:-1;;;;;1432:27:52;;:::o;9533:1601::-;3857:10;9707:4;3849:19;;;;;;;;;;:31;;;3903:18;3849:31;-1:-1:-1;;;3849:50:52;;;:72;3841:81;;;;;;5048:6;;9686:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;9727:40;9796:17;-1:-1:-1;;;;;9770:49:52;;:51;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9770:51:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9770:51:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9770:51:52;;-1:-1:-1;9844:39:52;9836:4;:47;;;;;;;;;9835:120;;;-1:-1:-1;9908:46:52;9900:4;:54;;;;;;;;;9835:120;9831:596;;;-1:-1:-1;;;;;9976:47:52;;;;;;:28;:47;;;;;:60;;;9971:446;;10082:44;;;;;;;;-1:-1:-1;;;;;10082:44:52;;;;;;;;;;;;;10056:20;27:10:-1;;-1:-1;23:18;;;45:23;;-1:-1;10056:71:52;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10056:71:52;;;;;;;;;;;;;;;;;;;10211:61;;;;;;;;;;10242:27;;-1:-1:-1;;10242:29:52;10211:61;;;;;;10145:47;;;:28;:47;;;;;;;:127;;;;-1:-1:-1;;10145:127:52;;;;;;;;;;;;9971:446;;;-1:-1:-1;;;;;10331:47:52;;;;;;:28;:47;;;;;-1:-1:-1;10331:53:52;;10310:20;:75;;10395:7;;10331:53;10310:75;;;;;;;;;;;;;;;;:82;;:92;;;;9971:446;10449:40;10441:4;:48;;;;;;;;;10440:121;;;-1:-1:-1;10514:46:52;10506:4;:54;;;;;;;;;10440:121;10436:603;;;-1:-1:-1;;;;;10582:48:52;;;;;;:29;:48;;;;;:61;;;10577:452;;10690:44;;;;;;;;-1:-1:-1;;;;;10690:44:52;;;;;;;;;;;;;10663:21;27:10:-1;;-1:-1;23:18;;;45:23;;-1:-1;10663:72:52;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10663:72:52;;;;;;;;;;;;;;;;;;;10820:62;;;;;;;;;;10851:28;;-1:-1:-1;;10851:30:52;10820:62;;;;;;10753:48;;;:29;:48;;;;;;;:129;;;;-1:-1:-1;;10753:129:52;;;;;;;;;;;;10577:452;;;-1:-1:-1;;;;;10942:48:52;;;;;;:29;:48;;;;;-1:-1:-1;10942:54:52;;10920:21;:77;;11007:7;;10942:54;10920:77;;;;;;;;;;;;;;;;:84;;:94;;;;10577:452;11073:17;-1:-1:-1;;;;;11053:53:52;;11092:7;11101:4;11053:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11123:4:52;;9533:1601;-1:-1:-1;;;;;9533:1601:52:o;6976:1111::-;3703:10;7201:4;3695:19;;;;;;;;;;:31;;;3749:18;3695:31;-1:-1:-1;;;3695:50:52;;;:72;3687:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;7180:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;7222:20;;:::i;:::-;-1:-1:-1;;;;;;7245:16:52;;:7;:16;;;;;;;;;;;7222:39;;;;;;;;;;;-1:-1:-1;7222:39:52;;;;-1:-1:-1;;;;;;;7222:39:52;;;;;;;;;;7623:10;7615:19;;;;;;;;;;:31;;7593:18;;7580:31;;7615;;;7614:32;7560:87;-1:-1:-1;;;7560:87:52;:100;7552:109;;;;;;7813:10;7849:1;7805:19;;;;;;;;;;;:31;;;7784:18;;;;-1:-1:-1;;;;7805:31:52;;;;7804:32;7784:53;7764:74;:87;7756:96;;;;;;-1:-1:-1;;;;;7896:16:52;;:7;:16;;;;;;;;;;;:41;;;-1:-1:-1;7947:28:52;:62;;-1:-1:-1;;7947:62:52;-1:-1:-1;;;7978:31:52;;-1:-1:-1;7947:62:52;;;;8024:35;8039:10;;8024:35;;;8076:4;8069:11;;;4708:1;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;1867:47;;;;;;;;;;5303:318;3554:10;5497:4;3546:19;;;;;;;;;;3607:10;3546:31;;3600:18;3546:31;-1:-1:-1;;;3546:50:52;;;:72;3538:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;5476:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;5522:40;;;;;;;;-1:-1:-1;;;;;5522:40:52;;;5537:10;;5522:40;;;;;;;;;5579:16;;:35;;;-1:-1:-1;;;5579:35:52;;-1:-1:-1;;;;;5579:35:52;;;;;;;;;;;;;;;:16;;;;;-1:-1:-1;;5579:35:52;;;;;;;;;;;;;;-1:-1:-1;5579:16:52;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;5579:35:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5579:35:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5579:35:52;;-1:-1:-1;4708:1:52;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;20646:340;5048:6;;20805:4;;20767:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;-1:-1:-1;;;;;20837:47:52;;;;;;:28;:47;;;;;:60;;;;:141;;-1:-1:-1;;;;;;;;;20917:48:52;;;;;:29;:48;;;;;:61;;;;20646:340::o;17245:384::-;3554:10;17527:4;3546:19;;;;;;;;;;3607:10;3546:31;;3600:18;3546:31;-1:-1:-1;;;3546:50:52;;;:72;3538:81;;;;;;4385:580;4442:11;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;17505:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;17554:6;;:68;;;-1:-1:-1;;;17554:68:52;;-1:-1:-1;;;;;17554:68:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;;;;;:32;;:68;;;;;;;;;;;;;;-1:-1:-1;17554:6:52;:68;;;5:2:-1;;;;30:1;27;20:12;5:2;17554:68:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17554:68:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17554:68:52;;-1:-1:-1;4708:1:52;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;;3629:1;;17245:384;;;;;;;:::o;20992:159::-;-1:-1:-1;;;;;21083:16:52;21059:4;21083:16;;;;;;;;;;-1:-1:-1;21083:28:52;;21134:9;21083:28;-1:-1:-1;;;21083:47:52;:60;;;20992:159::o;410:20743::-;;;;;;;;;;-1:-1:-1;410:20743:52;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;410:20743:52;;;-1:-1:-1;;410:20743:52;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.5.4;\n\nimport \"./Avatar.sol\";\nimport \"../globalConstraints/GlobalConstraintInterface.sol\";\nimport \"./ControllerInterface.sol\";\n\n\n/**\n * @title Controller contract\n * @dev A controller controls the organizations tokens, reputation and avatar.\n * It is subject to a set of schemes and constraints that determine its behavior.\n * Each scheme has it own parameters and operation permissions.\n */\ncontract Controller is ControllerInterface {\n\n    struct Scheme {\n        bytes32 paramsHash;  // a hash \"configuration\" of the scheme\n        bytes4  permissions; // A bitwise flags of permissions,\n                             // All 0: Not registered,\n                             // 1st bit: Flag if the scheme is registered,\n                             // 2nd bit: Scheme can register other schemes\n                             // 3rd bit: Scheme can add/remove global constraints\n                             // 4th bit: Scheme can upgrade the controller\n                             // 5th bit: Scheme can call genericCall on behalf of\n                             //          the organization avatar\n    }\n\n    struct GlobalConstraint {\n        address gcAddress;\n        bytes32 params;\n    }\n\n    struct GlobalConstraintRegister {\n        bool isRegistered; //is registered\n        uint256 index;    //index at globalConstraints\n    }\n\n    mapping(address=>Scheme) public schemes;\n\n    Avatar public avatar;\n    DAOToken public nativeToken;\n    Reputation public nativeReputation;\n  // newController will point to the new controller after the present controller is upgraded\n    address public newController;\n  // globalConstraintsPre that determine pre conditions for all actions on the controller\n\n    GlobalConstraint[] public globalConstraintsPre;\n  // globalConstraintsPost that determine post conditions for all actions on the controller\n    GlobalConstraint[] public globalConstraintsPost;\n  // globalConstraintsRegisterPre indicate if a globalConstraints is registered as a pre global constraint\n    mapping(address=>GlobalConstraintRegister) public globalConstraintsRegisterPre;\n  // globalConstraintsRegisterPost indicate if a globalConstraints is registered as a post global constraint\n    mapping(address=>GlobalConstraintRegister) public globalConstraintsRegisterPost;\n\n    event MintReputation (address indexed _sender, address indexed _to, uint256 _amount);\n    event BurnReputation (address indexed _sender, address indexed _from, uint256 _amount);\n    event MintTokens (address indexed _sender, address indexed _beneficiary, uint256 _amount);\n    event RegisterScheme (address indexed _sender, address indexed _scheme);\n    event UnregisterScheme (address indexed _sender, address indexed _scheme);\n    event UpgradeController(address indexed _oldController, address _newController);\n\n    event AddGlobalConstraint(\n        address indexed _globalConstraint,\n        bytes32 _params,\n        GlobalConstraintInterface.CallPhase _when);\n\n    event RemoveGlobalConstraint(address indexed _globalConstraint, uint256 _index, bool _isPre);\n\n    constructor( Avatar _avatar) public {\n        avatar = _avatar;\n        nativeToken = avatar.nativeToken();\n        nativeReputation = avatar.nativeReputation();\n        schemes[msg.sender] = Scheme({paramsHash: bytes32(0), permissions: bytes4(0x0000001F)});\n    }\n\n  // Do not allow mistaken calls:\n   // solhint-disable-next-line payable-fallback\n    function() external {\n        revert();\n    }\n\n  // Modifiers:\n    modifier onlyRegisteredScheme() {\n        require(schemes[msg.sender].permissions&bytes4(0x00000001) == bytes4(0x00000001));\n        _;\n    }\n\n    modifier onlyRegisteringSchemes() {\n        require(schemes[msg.sender].permissions&bytes4(0x00000002) == bytes4(0x00000002));\n        _;\n    }\n\n    modifier onlyGlobalConstraintsScheme() {\n        require(schemes[msg.sender].permissions&bytes4(0x00000004) == bytes4(0x00000004));\n        _;\n    }\n\n    modifier onlyUpgradingScheme() {\n        require(schemes[msg.sender].permissions&bytes4(0x00000008) == bytes4(0x00000008));\n        _;\n    }\n\n    modifier onlyGenericCallScheme() {\n        require(schemes[msg.sender].permissions&bytes4(0x00000010) == bytes4(0x00000010));\n        _;\n    }\n\n    modifier onlyMetaDataScheme() {\n        require(schemes[msg.sender].permissions&bytes4(0x00000010) == bytes4(0x00000010));\n        _;\n    }\n\n    modifier onlySubjectToConstraint(bytes32 func) {\n        uint256 idx;\n        for (idx = 0; idx < globalConstraintsPre.length; idx++) {\n            require(\n            (GlobalConstraintInterface(globalConstraintsPre[idx].gcAddress))\n            .pre(msg.sender, globalConstraintsPre[idx].params, func));\n        }\n        _;\n        for (idx = 0; idx < globalConstraintsPost.length; idx++) {\n            require(\n            (GlobalConstraintInterface(globalConstraintsPost[idx].gcAddress))\n            .post(msg.sender, globalConstraintsPost[idx].params, func));\n        }\n    }\n\n    modifier isAvatarValid(address _avatar) {\n        require(_avatar == address(avatar));\n        _;\n    }\n\n    /**\n     * @dev Mint `_amount` of reputation that are assigned to `_to` .\n     * @param  _amount amount of reputation to mint\n     * @param _to beneficiary address\n     * @return bool which represents a success\n     */\n    function mintReputation(uint256 _amount, address _to, address _avatar)\n    external\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"mintReputation\")\n    isAvatarValid(_avatar)\n    returns(bool)\n    {\n        emit MintReputation(msg.sender, _to, _amount);\n        return nativeReputation.mint(_to, _amount);\n    }\n\n    /**\n     * @dev Burns `_amount` of reputation from `_from`\n     * @param _amount amount of reputation to burn\n     * @param _from The address that will lose the reputation\n     * @return bool which represents a success\n     */\n    function burnReputation(uint256 _amount, address _from, address _avatar)\n    external\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"burnReputation\")\n    isAvatarValid(_avatar)\n    returns(bool)\n    {\n        emit BurnReputation(msg.sender, _from, _amount);\n        return nativeReputation.burn(_from, _amount);\n    }\n\n    /**\n     * @dev mint tokens .\n     * @param  _amount amount of token to mint\n     * @param _beneficiary beneficiary address\n     * @return bool which represents a success\n     */\n    function mintTokens(uint256 _amount, address _beneficiary, address _avatar)\n    external\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"mintTokens\")\n    isAvatarValid(_avatar)\n    returns(bool)\n    {\n        emit MintTokens(msg.sender, _beneficiary, _amount);\n        return nativeToken.mint(_beneficiary, _amount);\n    }\n\n  /**\n   * @dev register a scheme\n   * @param _scheme the address of the scheme\n   * @param _paramsHash a hashed configuration of the usage of the scheme\n   * @param _permissions the permissions the new scheme will have\n   * @return bool which represents a success\n   */\n    function registerScheme(address _scheme, bytes32 _paramsHash, bytes4 _permissions, address _avatar)\n    external\n    onlyRegisteringSchemes\n    onlySubjectToConstraint(\"registerScheme\")\n    isAvatarValid(_avatar)\n    returns(bool)\n    {\n\n        Scheme memory scheme = schemes[_scheme];\n\n    // Check scheme has at least the permissions it is changing, and at least the current permissions:\n    // Implementation is a bit messy. One must recall logic-circuits ^^\n\n    // produces non-zero if sender does not have all of the perms that are changing between old and new\n        require(bytes4(0x0000001f)&(_permissions^scheme.permissions)&(~schemes[msg.sender].permissions) == bytes4(0));\n\n    // produces non-zero if sender does not have all of the perms in the old scheme\n        require(bytes4(0x0000001f)&(scheme.permissions&(~schemes[msg.sender].permissions)) == bytes4(0));\n\n    // Add or change the scheme:\n        schemes[_scheme].paramsHash = _paramsHash;\n        schemes[_scheme].permissions = _permissions|bytes4(0x00000001);\n        emit RegisterScheme(msg.sender, _scheme);\n        return true;\n    }\n\n    /**\n     * @dev unregister a scheme\n     * @param _scheme the address of the scheme\n     * @return bool which represents a success\n     */\n    function unregisterScheme( address _scheme, address _avatar)\n    external\n    onlyRegisteringSchemes\n    onlySubjectToConstraint(\"unregisterScheme\")\n    isAvatarValid(_avatar)\n    returns(bool)\n    {\n    //check if the scheme is registered\n        if (_isSchemeRegistered(_scheme) == false) {\n            return false;\n        }\n    // Check the unregistering scheme has enough permissions:\n        require(bytes4(0x0000001f)&(schemes[_scheme].permissions&(~schemes[msg.sender].permissions)) == bytes4(0));\n\n    // Unregister:\n        emit UnregisterScheme(msg.sender, _scheme);\n        delete schemes[_scheme];\n        return true;\n    }\n\n    /**\n     * @dev unregister the caller's scheme\n     * @return bool which represents a success\n     */\n    function unregisterSelf(address _avatar) external isAvatarValid(_avatar) returns(bool) {\n        if (_isSchemeRegistered(msg.sender) == false) {\n            return false;\n        }\n        delete schemes[msg.sender];\n        emit UnregisterScheme(msg.sender, msg.sender);\n        return true;\n    }\n\n    /**\n     * @dev add or update Global Constraint\n     * @param _globalConstraint the address of the global constraint to be added.\n     * @param _params the constraint parameters hash.\n     * @return bool which represents a success\n     */\n    function addGlobalConstraint(address _globalConstraint, bytes32 _params, address _avatar)\n    external\n    onlyGlobalConstraintsScheme\n    isAvatarValid(_avatar)\n    returns(bool)\n    {\n        GlobalConstraintInterface.CallPhase when = GlobalConstraintInterface(_globalConstraint).when();\n        if ((when == GlobalConstraintInterface.CallPhase.Pre)||\n            (when == GlobalConstraintInterface.CallPhase.PreAndPost)) {\n            if (!globalConstraintsRegisterPre[_globalConstraint].isRegistered) {\n                globalConstraintsPre.push(GlobalConstraint(_globalConstraint, _params));\n                globalConstraintsRegisterPre[_globalConstraint] =\n                GlobalConstraintRegister(true, globalConstraintsPre.length-1);\n            }else {\n                globalConstraintsPre[globalConstraintsRegisterPre[_globalConstraint].index].params = _params;\n            }\n        }\n        if ((when == GlobalConstraintInterface.CallPhase.Post)||\n            (when == GlobalConstraintInterface.CallPhase.PreAndPost)) {\n            if (!globalConstraintsRegisterPost[_globalConstraint].isRegistered) {\n                globalConstraintsPost.push(GlobalConstraint(_globalConstraint, _params));\n                globalConstraintsRegisterPost[_globalConstraint] =\n                GlobalConstraintRegister(true, globalConstraintsPost.length-1);\n            }else {\n                globalConstraintsPost[globalConstraintsRegisterPost[_globalConstraint].index].params = _params;\n            }\n        }\n        emit AddGlobalConstraint(_globalConstraint, _params, when);\n        return true;\n    }\n\n    /**\n     * @dev remove Global Constraint\n     * @param _globalConstraint the address of the global constraint to be remove.\n     * @return bool which represents a success\n     */\n     // solhint-disable-next-line code-complexity\n    function removeGlobalConstraint (address _globalConstraint, address _avatar)\n    external\n    onlyGlobalConstraintsScheme\n    isAvatarValid(_avatar)\n    returns(bool)\n    {\n        GlobalConstraintRegister memory globalConstraintRegister;\n        GlobalConstraint memory globalConstraint;\n        GlobalConstraintInterface.CallPhase when = GlobalConstraintInterface(_globalConstraint).when();\n        bool retVal = false;\n\n        if ((when == GlobalConstraintInterface.CallPhase.Pre)||\n            (when == GlobalConstraintInterface.CallPhase.PreAndPost)) {\n            globalConstraintRegister = globalConstraintsRegisterPre[_globalConstraint];\n            if (globalConstraintRegister.isRegistered) {\n                if (globalConstraintRegister.index < globalConstraintsPre.length-1) {\n                    globalConstraint = globalConstraintsPre[globalConstraintsPre.length-1];\n                    globalConstraintsPre[globalConstraintRegister.index] = globalConstraint;\n                    globalConstraintsRegisterPre[globalConstraint.gcAddress].index = globalConstraintRegister.index;\n                }\n                globalConstraintsPre.length--;\n                delete globalConstraintsRegisterPre[_globalConstraint];\n                retVal = true;\n            }\n        }\n        if ((when == GlobalConstraintInterface.CallPhase.Post)||\n            (when == GlobalConstraintInterface.CallPhase.PreAndPost)) {\n            globalConstraintRegister = globalConstraintsRegisterPost[_globalConstraint];\n            if (globalConstraintRegister.isRegistered) {\n                if (globalConstraintRegister.index < globalConstraintsPost.length-1) {\n                    globalConstraint = globalConstraintsPost[globalConstraintsPost.length-1];\n                    globalConstraintsPost[globalConstraintRegister.index] = globalConstraint;\n                    globalConstraintsRegisterPost[globalConstraint.gcAddress].index = globalConstraintRegister.index;\n                }\n                globalConstraintsPost.length--;\n                delete globalConstraintsRegisterPost[_globalConstraint];\n                retVal = true;\n            }\n        }\n        if (retVal) {\n            emit RemoveGlobalConstraint(\n            _globalConstraint,\n            globalConstraintRegister.index,\n            when == GlobalConstraintInterface.CallPhase.Pre\n            );\n        }\n        return retVal;\n    }\n\n  /**\n    * @dev upgrade the Controller\n    *      The function will trigger an event 'UpgradeController'.\n    * @param  _newController the address of the new controller.\n    * @return bool which represents a success\n    */\n    function upgradeController(address _newController, Avatar _avatar)\n    external\n    onlyUpgradingScheme\n    isAvatarValid(address(_avatar))\n    returns(bool)\n    {\n        require(newController == address(0));   // so the upgrade could be done once for a contract.\n        require(_newController != address(0));\n        newController = _newController;\n        avatar.transferOwnership(_newController);\n        require(avatar.owner() == _newController);\n        if (nativeToken.owner() == address(this)) {\n            nativeToken.transferOwnership(_newController);\n            require(nativeToken.owner() == _newController);\n        }\n        if (nativeReputation.owner() == address(this)) {\n            nativeReputation.transferOwnership(_newController);\n            require(nativeReputation.owner() == _newController);\n        }\n        emit UpgradeController(address(this), newController);\n        return true;\n    }\n\n    /**\n    * @dev perform a generic call to an arbitrary contract\n    * @param _contract  the contract's address to call\n    * @param _data ABI-encoded contract call to call `_contract` address.\n    * @param _avatar the controller's avatar address\n    * @param _value value (ETH) to transfer with the transaction\n    * @return bool -success\n    *         bytes  - the return value of the called _contract's function.\n    */\n    function genericCall(address _contract, bytes calldata _data, Avatar _avatar, uint256 _value)\n    external\n    onlyGenericCallScheme\n    onlySubjectToConstraint(\"genericCall\")\n    isAvatarValid(address(_avatar))\n    returns (bool, bytes memory)\n    {\n        return avatar.genericCall(_contract, _data, _value);\n    }\n\n  /**\n   * @dev send some ether\n   * @param _amountInWei the amount of ether (in Wei) to send\n   * @param _to address of the beneficiary\n   * @return bool which represents a success\n   */\n    function sendEther(uint256 _amountInWei, address payable _to, Avatar _avatar)\n    external\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"sendEther\")\n    isAvatarValid(address(_avatar))\n    returns(bool)\n    {\n        return avatar.sendEther(_amountInWei, _to);\n    }\n\n    /**\n    * @dev send some amount of arbitrary ERC20 Tokens\n    * @param _externalToken the address of the Token Contract\n    * @param _to address of the beneficiary\n    * @param _value the amount of ether (in Wei) to send\n    * @return bool which represents a success\n    */\n    function externalTokenTransfer(IERC20 _externalToken, address _to, uint256 _value, Avatar _avatar)\n    external\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"externalTokenTransfer\")\n    isAvatarValid(address(_avatar))\n    returns(bool)\n    {\n        return avatar.externalTokenTransfer(_externalToken, _to, _value);\n    }\n\n    /**\n    * @dev transfer token \"from\" address \"to\" address\n    *      One must to approve the amount of tokens which can be spend from the\n    *      \"from\" account.This can be done using externalTokenApprove.\n    * @param _externalToken the address of the Token Contract\n    * @param _from address of the account to send from\n    * @param _to address of the beneficiary\n    * @param _value the amount of ether (in Wei) to send\n    * @return bool which represents a success\n    */\n    function externalTokenTransferFrom(\n    IERC20 _externalToken,\n    address _from,\n    address _to,\n    uint256 _value,\n    Avatar _avatar)\n    external\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"externalTokenTransferFrom\")\n    isAvatarValid(address(_avatar))\n    returns(bool)\n    {\n        return avatar.externalTokenTransferFrom(_externalToken, _from, _to, _value);\n    }\n\n    /**\n    * @dev externalTokenApproval approve the spender address to spend a specified amount of tokens\n    *      on behalf of msg.sender.\n    * @param _externalToken the address of the Token Contract\n    * @param _spender address\n    * @param _value the amount of ether (in Wei) which the approval is referring to.\n    * @return bool which represents a success\n    */\n    function externalTokenApproval(IERC20 _externalToken, address _spender, uint256 _value, Avatar _avatar)\n    external\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"externalTokenIncreaseApproval\")\n    isAvatarValid(address(_avatar))\n    returns(bool)\n    {\n        return avatar.externalTokenApproval(_externalToken, _spender, _value);\n    }\n\n    /**\n    * @dev metaData emits an event with a string, should contain the hash of some meta data.\n    * @param _metaData a string representing a hash of the meta data\n    * @param _avatar Avatar\n    * @return bool which represents a success\n    */\n    function metaData(string calldata _metaData, Avatar _avatar)\n        external\n        onlyMetaDataScheme\n        isAvatarValid(address(_avatar))\n        returns(bool)\n        {\n        return avatar.metaData(_metaData);\n    }\n\n    /**\n     * @dev getNativeReputation\n     * @param _avatar the organization avatar.\n     * @return organization native reputation\n     */\n    function getNativeReputation(address _avatar) external isAvatarValid(_avatar) view returns(address) {\n        return address(nativeReputation);\n    }\n\n    function isSchemeRegistered(address _scheme, address _avatar) external isAvatarValid(_avatar) view returns(bool) {\n        return _isSchemeRegistered(_scheme);\n    }\n\n    function getSchemeParameters(address _scheme, address _avatar)\n    external\n    isAvatarValid(_avatar)\n    view\n    returns(bytes32)\n    {\n        return schemes[_scheme].paramsHash;\n    }\n\n    function getSchemePermissions(address _scheme, address _avatar)\n    external\n    isAvatarValid(_avatar)\n    view\n    returns(bytes4)\n    {\n        return schemes[_scheme].permissions;\n    }\n\n    function getGlobalConstraintParameters(address _globalConstraint, address) external view returns(bytes32) {\n\n        GlobalConstraintRegister memory register = globalConstraintsRegisterPre[_globalConstraint];\n\n        if (register.isRegistered) {\n            return globalConstraintsPre[register.index].params;\n        }\n\n        register = globalConstraintsRegisterPost[_globalConstraint];\n\n        if (register.isRegistered) {\n            return globalConstraintsPost[register.index].params;\n        }\n    }\n\n   /**\n    * @dev globalConstraintsCount return the global constraint pre and post count\n    * @return uint256 globalConstraintsPre count.\n    * @return uint256 globalConstraintsPost count.\n    */\n    function globalConstraintsCount(address _avatar)\n        external\n        isAvatarValid(_avatar)\n        view\n        returns(uint, uint)\n        {\n        return (globalConstraintsPre.length, globalConstraintsPost.length);\n    }\n\n    function isGlobalConstraintRegistered(address _globalConstraint, address _avatar)\n        external\n        isAvatarValid(_avatar)\n        view\n        returns(bool)\n        {\n        return (globalConstraintsRegisterPre[_globalConstraint].isRegistered ||\n                globalConstraintsRegisterPost[_globalConstraint].isRegistered);\n    }\n\n    function _isSchemeRegistered(address _scheme) private view returns(bool) {\n        return (schemes[_scheme].permissions&bytes4(0x00000001) != bytes4(0));\n    }\n}\n",
  "sourcePath": "@daostack/arc/contracts/controller/Controller.sol",
  "ast": {
    "absolutePath": "@daostack/arc/contracts/controller/Controller.sol",
    "exportedSymbols": {
      "Controller": [
        14161
      ]
    },
    "id": 14162,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 12707,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:52"
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "./Avatar.sol",
        "id": 12708,
        "nodeType": "ImportDirective",
        "scope": 14162,
        "sourceUnit": 12706,
        "src": "25:22:52",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol",
        "file": "../globalConstraints/GlobalConstraintInterface.sol",
        "id": 12709,
        "nodeType": "ImportDirective",
        "scope": 14162,
        "sourceUnit": 14505,
        "src": "48:60:52",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/ControllerInterface.sol",
        "file": "./ControllerInterface.sol",
        "id": 12710,
        "nodeType": "ImportDirective",
        "scope": 14162,
        "sourceUnit": 14395,
        "src": "109:35:52",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12711,
              "name": "ControllerInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14394,
              "src": "433:19:52",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ControllerInterface_$14394",
                "typeString": "contract ControllerInterface"
              }
            },
            "id": 12712,
            "nodeType": "InheritanceSpecifier",
            "src": "433:19:52"
          }
        ],
        "contractDependencies": [
          14394
        ],
        "contractKind": "contract",
        "documentation": "@title Controller contract\n@dev A controller controls the organizations tokens, reputation and avatar.\nIt is subject to a set of schemes and constraints that determine its behavior.\nEach scheme has it own parameters and operation permissions.",
        "fullyImplemented": true,
        "id": 14161,
        "linearizedBaseContracts": [
          14161,
          14394
        ],
        "name": "Controller",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "Controller.Scheme",
            "id": 12717,
            "members": [
              {
                "constant": false,
                "id": 12714,
                "name": "paramsHash",
                "nodeType": "VariableDeclaration",
                "scope": 12717,
                "src": "484:18:52",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 12713,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "484:7:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12716,
                "name": "permissions",
                "nodeType": "VariableDeclaration",
                "scope": 12717,
                "src": "553:19:52",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes4",
                  "typeString": "bytes4"
                },
                "typeName": {
                  "id": 12715,
                  "name": "bytes4",
                  "nodeType": "ElementaryTypeName",
                  "src": "553:6:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Scheme",
            "nodeType": "StructDefinition",
            "scope": 14161,
            "src": "460:663:52",
            "visibility": "public"
          },
          {
            "canonicalName": "Controller.GlobalConstraint",
            "id": 12722,
            "members": [
              {
                "constant": false,
                "id": 12719,
                "name": "gcAddress",
                "nodeType": "VariableDeclaration",
                "scope": 12722,
                "src": "1163:17:52",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 12718,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1163:7:52",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12721,
                "name": "params",
                "nodeType": "VariableDeclaration",
                "scope": 12722,
                "src": "1190:14:52",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 12720,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1190:7:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "GlobalConstraint",
            "nodeType": "StructDefinition",
            "scope": 14161,
            "src": "1129:82:52",
            "visibility": "public"
          },
          {
            "canonicalName": "Controller.GlobalConstraintRegister",
            "id": 12727,
            "members": [
              {
                "constant": false,
                "id": 12724,
                "name": "isRegistered",
                "nodeType": "VariableDeclaration",
                "scope": 12727,
                "src": "1259:17:52",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 12723,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1259:4:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12726,
                "name": "index",
                "nodeType": "VariableDeclaration",
                "scope": 12727,
                "src": "1302:13:52",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 12725,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1302:7:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "GlobalConstraintRegister",
            "nodeType": "StructDefinition",
            "scope": 14161,
            "src": "1217:137:52",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12731,
            "name": "schemes",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "1360:39:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
              "typeString": "mapping(address => struct Controller.Scheme)"
            },
            "typeName": {
              "id": 12730,
              "keyType": {
                "id": 12728,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1368:7:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1360:24:52",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                "typeString": "mapping(address => struct Controller.Scheme)"
              },
              "valueType": {
                "contractScope": null,
                "id": 12729,
                "name": "Scheme",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 12717,
                "src": "1377:6:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Scheme_$12717_storage_ptr",
                  "typeString": "struct Controller.Scheme"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12733,
            "name": "avatar",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "1406:20:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Avatar_$12705",
              "typeString": "contract Avatar"
            },
            "typeName": {
              "contractScope": null,
              "id": 12732,
              "name": "Avatar",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12705,
              "src": "1406:6:52",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Avatar_$12705",
                "typeString": "contract Avatar"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12735,
            "name": "nativeToken",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "1432:27:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DAOToken_$14470",
              "typeString": "contract DAOToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 12734,
              "name": "DAOToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14470,
              "src": "1432:8:52",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DAOToken_$14470",
                "typeString": "contract DAOToken"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12737,
            "name": "nativeReputation",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "1465:34:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Reputation_$16423",
              "typeString": "contract Reputation"
            },
            "typeName": {
              "contractScope": null,
              "id": 12736,
              "name": "Reputation",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16423,
              "src": "1465:10:52",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Reputation_$16423",
                "typeString": "contract Reputation"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12739,
            "name": "newController",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "1598:28:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 12738,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1598:7:52",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12742,
            "name": "globalConstraintsPre",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "1723:46:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
              "typeString": "struct Controller.GlobalConstraint[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 12740,
                "name": "GlobalConstraint",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 12722,
                "src": "1723:16:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraint"
                }
              },
              "id": 12741,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1723:18:52",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage_ptr",
                "typeString": "struct Controller.GlobalConstraint[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12745,
            "name": "globalConstraintsPost",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "1867:47:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
              "typeString": "struct Controller.GlobalConstraint[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 12743,
                "name": "GlobalConstraint",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 12722,
                "src": "1867:16:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraint"
                }
              },
              "id": 12744,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1867:18:52",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage_ptr",
                "typeString": "struct Controller.GlobalConstraint[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12749,
            "name": "globalConstraintsRegisterPre",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "2027:78:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
            },
            "typeName": {
              "id": 12748,
              "keyType": {
                "id": 12746,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2035:7:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2027:42:52",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
              },
              "valueType": {
                "contractScope": null,
                "id": 12747,
                "name": "GlobalConstraintRegister",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 12727,
                "src": "2044:24:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraintRegister"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12753,
            "name": "globalConstraintsRegisterPost",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "2220:79:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
            },
            "typeName": {
              "id": 12752,
              "keyType": {
                "id": 12750,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2228:7:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2220:42:52",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
              },
              "valueType": {
                "contractScope": null,
                "id": 12751,
                "name": "GlobalConstraintRegister",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 12727,
                "src": "2237:24:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraintRegister"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12761,
            "name": "MintReputation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12760,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12755,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 12761,
                  "src": "2328:23:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12754,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2328:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12757,
                  "indexed": true,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 12761,
                  "src": "2353:19:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12756,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2353:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12759,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 12761,
                  "src": "2374:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12758,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2374:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2327:63:52"
            },
            "src": "2306:85:52"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12769,
            "name": "BurnReputation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12763,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 12769,
                  "src": "2418:23:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12762,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2418:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12765,
                  "indexed": true,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 12769,
                  "src": "2443:21:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12764,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2443:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12767,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 12769,
                  "src": "2466:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12766,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2466:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2417:65:52"
            },
            "src": "2396:87:52"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12777,
            "name": "MintTokens",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12776,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12771,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 12777,
                  "src": "2506:23:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12770,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2506:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12773,
                  "indexed": true,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 12777,
                  "src": "2531:28:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12772,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2531:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12775,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 12777,
                  "src": "2561:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12774,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2561:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2505:72:52"
            },
            "src": "2488:90:52"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12783,
            "name": "RegisterScheme",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12779,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 12783,
                  "src": "2605:23:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12778,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2605:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12781,
                  "indexed": true,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 12783,
                  "src": "2630:23:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12780,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2630:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2604:50:52"
            },
            "src": "2583:72:52"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12789,
            "name": "UnregisterScheme",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12785,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 12789,
                  "src": "2684:23:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12784,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2684:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12787,
                  "indexed": true,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 12789,
                  "src": "2709:23:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12786,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2709:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2683:50:52"
            },
            "src": "2660:74:52"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12795,
            "name": "UpgradeController",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12794,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12791,
                  "indexed": true,
                  "name": "_oldController",
                  "nodeType": "VariableDeclaration",
                  "scope": 12795,
                  "src": "2763:30:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12790,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2763:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12793,
                  "indexed": false,
                  "name": "_newController",
                  "nodeType": "VariableDeclaration",
                  "scope": 12795,
                  "src": "2795:22:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12792,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2795:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2762:56:52"
            },
            "src": "2739:80:52"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12803,
            "name": "AddGlobalConstraint",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12802,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12797,
                  "indexed": true,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 12803,
                  "src": "2860:33:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12796,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2860:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12799,
                  "indexed": false,
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 12803,
                  "src": "2903:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12798,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2903:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12801,
                  "indexed": false,
                  "name": "_when",
                  "nodeType": "VariableDeclaration",
                  "scope": 12803,
                  "src": "2928:41:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_CallPhase_$14476",
                    "typeString": "enum GlobalConstraintInterface.CallPhase"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 12800,
                    "name": "GlobalConstraintInterface.CallPhase",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 14476,
                    "src": "2928:35:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_CallPhase_$14476",
                      "typeString": "enum GlobalConstraintInterface.CallPhase"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2850:120:52"
            },
            "src": "2825:146:52"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12811,
            "name": "RemoveGlobalConstraint",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12805,
                  "indexed": true,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 12811,
                  "src": "3006:33:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12804,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3006:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12807,
                  "indexed": false,
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 12811,
                  "src": "3041:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12806,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3041:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12809,
                  "indexed": false,
                  "name": "_isPre",
                  "nodeType": "VariableDeclaration",
                  "scope": 12811,
                  "src": "3057:11:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12808,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3057:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3005:64:52"
            },
            "src": "2977:93:52"
          },
          {
            "body": {
              "id": 12846,
              "nodeType": "Block",
              "src": "3112:228:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12818,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 12816,
                      "name": "avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12733,
                      "src": "3122:6:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Avatar_$12705",
                        "typeString": "contract Avatar"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 12817,
                      "name": "_avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12813,
                      "src": "3131:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Avatar_$12705",
                        "typeString": "contract Avatar"
                      }
                    },
                    "src": "3122:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "id": 12819,
                  "nodeType": "ExpressionStatement",
                  "src": "3122:16:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12824,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 12820,
                      "name": "nativeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12735,
                      "src": "3148:11:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DAOToken_$14470",
                        "typeString": "contract DAOToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 12821,
                          "name": "avatar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12733,
                          "src": "3162:6:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Avatar_$12705",
                            "typeString": "contract Avatar"
                          }
                        },
                        "id": 12822,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "nativeToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12441,
                        "src": "3162:18:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                          "typeString": "function () view external returns (contract DAOToken)"
                        }
                      },
                      "id": 12823,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3162:20:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DAOToken_$14470",
                        "typeString": "contract DAOToken"
                      }
                    },
                    "src": "3148:34:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DAOToken_$14470",
                      "typeString": "contract DAOToken"
                    }
                  },
                  "id": 12825,
                  "nodeType": "ExpressionStatement",
                  "src": "3148:34:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 12826,
                      "name": "nativeReputation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12737,
                      "src": "3192:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Reputation_$16423",
                        "typeString": "contract Reputation"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 12827,
                          "name": "avatar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12733,
                          "src": "3211:6:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Avatar_$12705",
                            "typeString": "contract Avatar"
                          }
                        },
                        "id": 12828,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "nativeReputation",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12443,
                        "src": "3211:23:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Reputation_$16423_$",
                          "typeString": "function () view external returns (contract Reputation)"
                        }
                      },
                      "id": 12829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3211:25:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Reputation_$16423",
                        "typeString": "contract Reputation"
                      }
                    },
                    "src": "3192:44:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Reputation_$16423",
                      "typeString": "contract Reputation"
                    }
                  },
                  "id": 12831,
                  "nodeType": "ExpressionStatement",
                  "src": "3192:44:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12832,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12731,
                        "src": "3246:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 12835,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 12833,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "3254:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12834,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3254:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3246:19:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 12838,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3296:1:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 12837,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3288:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 12839,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3288:10:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303146",
                              "id": 12841,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3320:10:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_31_by_1",
                                "typeString": "int_const 31"
                              },
                              "value": "0x0000001F"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_31_by_1",
                                "typeString": "int_const 31"
                              }
                            ],
                            "id": 12840,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3313:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 12842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3313:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        ],
                        "id": 12836,
                        "name": "Scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12717,
                        "src": "3268:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Scheme_$12717_storage_ptr_$",
                          "typeString": "type(struct Controller.Scheme storage pointer)"
                        }
                      },
                      "id": 12843,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "paramsHash",
                        "permissions"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "3268:65:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$12717_memory",
                        "typeString": "struct Controller.Scheme memory"
                      }
                    },
                    "src": "3246:87:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                      "typeString": "struct Controller.Scheme storage ref"
                    }
                  },
                  "id": 12845,
                  "nodeType": "ExpressionStatement",
                  "src": "3246:87:52"
                }
              ]
            },
            "documentation": null,
            "id": 12847,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12813,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 12847,
                  "src": "3089:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 12812,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "3089:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3087:17:52"
            },
            "returnParameters": {
              "id": 12815,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3112:0:52"
            },
            "scope": 14161,
            "src": "3076:264:52",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12853,
              "nodeType": "Block",
              "src": "3449:25:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 12850,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22176,
                        22177
                      ],
                      "referencedDeclaration": 22176,
                      "src": "3459:6:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 12851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3459:8:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12852,
                  "nodeType": "ExpressionStatement",
                  "src": "3459:8:52"
                }
              ]
            },
            "documentation": null,
            "id": 12854,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12848,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3437:2:52"
            },
            "returnParameters": {
              "id": 12849,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3449:0:52"
            },
            "scope": 14161,
            "src": "3429:45:52",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12873,
              "nodeType": "Block",
              "src": "3528:109:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 12869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 12865,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12857,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12731,
                                "src": "3546:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 12860,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12858,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22171,
                                  "src": "3554:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12859,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3554:10:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3546:19:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 12861,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12716,
                            "src": "3546:31:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303031",
                                "id": 12863,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3585:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "0x00000001"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "id": 12862,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3578:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 12864,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3578:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3546:50:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303031",
                              "id": 12867,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3607:10:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "0x00000001"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 12866,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3600:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 12868,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3600:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3546:72:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12856,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "3538:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 12870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3538:81:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12871,
                  "nodeType": "ExpressionStatement",
                  "src": "3538:81:52"
                },
                {
                  "id": 12872,
                  "nodeType": "PlaceholderStatement",
                  "src": "3629:1:52"
                }
              ]
            },
            "documentation": null,
            "id": 12874,
            "name": "onlyRegisteredScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12855,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3525:2:52"
            },
            "src": "3496:141:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12893,
              "nodeType": "Block",
              "src": "3677:109:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 12889,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 12885,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12877,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12731,
                                "src": "3695:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 12880,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12878,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22171,
                                  "src": "3703:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12879,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3703:10:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3695:19:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 12881,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12716,
                            "src": "3695:31:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303032",
                                "id": 12883,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3734:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "0x00000002"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                }
                              ],
                              "id": 12882,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3727:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 12884,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3727:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3695:50:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303032",
                              "id": 12887,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3756:10:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "0x00000002"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "id": 12886,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3749:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 12888,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3749:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3695:72:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12876,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "3687:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 12890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3687:81:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12891,
                  "nodeType": "ExpressionStatement",
                  "src": "3687:81:52"
                },
                {
                  "id": 12892,
                  "nodeType": "PlaceholderStatement",
                  "src": "3778:1:52"
                }
              ]
            },
            "documentation": null,
            "id": 12894,
            "name": "onlyRegisteringSchemes",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12875,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3674:2:52"
            },
            "src": "3643:143:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12913,
              "nodeType": "Block",
              "src": "3831:109:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 12909,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 12905,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12897,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12731,
                                "src": "3849:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 12900,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12898,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22171,
                                  "src": "3857:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12899,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3857:10:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3849:19:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 12901,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12716,
                            "src": "3849:31:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303034",
                                "id": 12903,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3888:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "0x00000004"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                }
                              ],
                              "id": 12902,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3881:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 12904,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3881:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3849:50:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303034",
                              "id": 12907,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3910:10:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_4_by_1",
                                "typeString": "int_const 4"
                              },
                              "value": "0x00000004"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_4_by_1",
                                "typeString": "int_const 4"
                              }
                            ],
                            "id": 12906,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3903:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 12908,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3903:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3849:72:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12896,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "3841:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 12910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3841:81:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12911,
                  "nodeType": "ExpressionStatement",
                  "src": "3841:81:52"
                },
                {
                  "id": 12912,
                  "nodeType": "PlaceholderStatement",
                  "src": "3932:1:52"
                }
              ]
            },
            "documentation": null,
            "id": 12914,
            "name": "onlyGlobalConstraintsScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12895,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3828:2:52"
            },
            "src": "3792:148:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12933,
              "nodeType": "Block",
              "src": "3977:109:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 12929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 12925,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12917,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12731,
                                "src": "3995:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 12920,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12918,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22171,
                                  "src": "4003:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12919,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4003:10:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3995:19:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 12921,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12716,
                            "src": "3995:31:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303038",
                                "id": 12923,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4034:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                },
                                "value": "0x00000008"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                }
                              ],
                              "id": 12922,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4027:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 12924,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4027:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3995:50:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303038",
                              "id": 12927,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4056:10:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              },
                              "value": "0x00000008"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              }
                            ],
                            "id": 12926,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4049:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 12928,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4049:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3995:72:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12916,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "3987:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 12930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3987:81:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12931,
                  "nodeType": "ExpressionStatement",
                  "src": "3987:81:52"
                },
                {
                  "id": 12932,
                  "nodeType": "PlaceholderStatement",
                  "src": "4078:1:52"
                }
              ]
            },
            "documentation": null,
            "id": 12934,
            "name": "onlyUpgradingScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12915,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3974:2:52"
            },
            "src": "3946:140:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12953,
              "nodeType": "Block",
              "src": "4125:109:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 12949,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 12945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12937,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12731,
                                "src": "4143:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 12940,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12938,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22171,
                                  "src": "4151:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12939,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4151:10:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4143:19:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 12941,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12716,
                            "src": "4143:31:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303130",
                                "id": 12943,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4182:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                },
                                "value": "0x00000010"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                }
                              ],
                              "id": 12942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4175:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 12944,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4175:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "4143:50:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303130",
                              "id": 12947,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4204:10:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              },
                              "value": "0x00000010"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              }
                            ],
                            "id": 12946,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4197:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 12948,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4197:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "4143:72:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12936,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "4135:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 12950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4135:81:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12951,
                  "nodeType": "ExpressionStatement",
                  "src": "4135:81:52"
                },
                {
                  "id": 12952,
                  "nodeType": "PlaceholderStatement",
                  "src": "4226:1:52"
                }
              ]
            },
            "documentation": null,
            "id": 12954,
            "name": "onlyGenericCallScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12935,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4122:2:52"
            },
            "src": "4092:142:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12973,
              "nodeType": "Block",
              "src": "4270:109:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 12969,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 12965,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12957,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12731,
                                "src": "4288:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 12960,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12958,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22171,
                                  "src": "4296:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12959,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4296:10:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4288:19:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 12961,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12716,
                            "src": "4288:31:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303130",
                                "id": 12963,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4327:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                },
                                "value": "0x00000010"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                }
                              ],
                              "id": 12962,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4320:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 12964,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4320:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "4288:50:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303130",
                              "id": 12967,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4349:10:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              },
                              "value": "0x00000010"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              }
                            ],
                            "id": 12966,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4342:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 12968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4342:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "4288:72:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12956,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "4280:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 12970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4280:81:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12971,
                  "nodeType": "ExpressionStatement",
                  "src": "4280:81:52"
                },
                {
                  "id": 12972,
                  "nodeType": "PlaceholderStatement",
                  "src": "4371:1:52"
                }
              ]
            },
            "documentation": null,
            "id": 12974,
            "name": "onlyMetaDataScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12955,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4267:2:52"
            },
            "src": "4240:139:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13046,
              "nodeType": "Block",
              "src": "4432:533:52",
              "statements": [
                {
                  "assignments": [
                    12979
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12979,
                      "name": "idx",
                      "nodeType": "VariableDeclaration",
                      "scope": 13046,
                      "src": "4442:11:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 12978,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4442:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12980,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4442:11:52"
                },
                {
                  "body": {
                    "id": 13011,
                    "nodeType": "Block",
                    "src": "4519:180:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13001,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22171,
                                    "src": "4636:3:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 13002,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4636:10:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 13003,
                                      "name": "globalConstraintsPre",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12742,
                                      "src": "4648:20:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 13005,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 13004,
                                      "name": "idx",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12979,
                                      "src": "4669:3:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4648:25:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 13006,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12721,
                                  "src": "4648:32:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 13007,
                                  "name": "func",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12976,
                                  "src": "4682:4:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 12994,
                                              "name": "globalConstraintsPre",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 12742,
                                              "src": "4581:20:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 12996,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 12995,
                                              "name": "idx",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 12979,
                                              "src": "4602:3:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "4581:25:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                              "typeString": "struct Controller.GlobalConstraint storage ref"
                                            }
                                          },
                                          "id": 12997,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "gcAddress",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 12719,
                                          "src": "4581:35:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 12993,
                                        "name": "GlobalConstraintInterface",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 14504,
                                        "src": "4555:25:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                          "typeString": "type(contract GlobalConstraintInterface)"
                                        }
                                      },
                                      "id": 12998,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4555:62:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_GlobalConstraintInterface_$14504",
                                        "typeString": "contract GlobalConstraintInterface"
                                      }
                                    }
                                  ],
                                  "id": 12999,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "4554:64:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GlobalConstraintInterface_$14504",
                                    "typeString": "contract GlobalConstraintInterface"
                                  }
                                },
                                "id": 13000,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "pre",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 14487,
                                "src": "4554:81:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                                  "typeString": "function (address,bytes32,bytes32) external returns (bool)"
                                }
                              },
                              "id": 13008,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4554:133:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 12992,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22174,
                            "src": "4533:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 13009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4533:155:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13010,
                        "nodeType": "ExpressionStatement",
                        "src": "4533:155:52"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 12988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 12985,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12979,
                      "src": "4477:3:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 12986,
                        "name": "globalConstraintsPre",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12742,
                        "src": "4483:20:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                          "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                        }
                      },
                      "id": 12987,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4483:27:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4477:33:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13012,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 12983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 12981,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12979,
                        "src": "4468:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 12982,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4474:1:52",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4468:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 12984,
                    "nodeType": "ExpressionStatement",
                    "src": "4468:7:52"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 12990,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4512:5:52",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 12989,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12979,
                        "src": "4512:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 12991,
                    "nodeType": "ExpressionStatement",
                    "src": "4512:5:52"
                  },
                  "nodeType": "ForStatement",
                  "src": "4463:236:52"
                },
                {
                  "id": 13013,
                  "nodeType": "PlaceholderStatement",
                  "src": "4708:1:52"
                },
                {
                  "body": {
                    "id": 13044,
                    "nodeType": "Block",
                    "src": "4776:183:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13034,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22171,
                                    "src": "4895:3:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 13035,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4895:10:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 13036,
                                      "name": "globalConstraintsPost",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12745,
                                      "src": "4907:21:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 13038,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 13037,
                                      "name": "idx",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12979,
                                      "src": "4929:3:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4907:26:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 13039,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12721,
                                  "src": "4907:33:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 13040,
                                  "name": "func",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12976,
                                  "src": "4942:4:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 13027,
                                              "name": "globalConstraintsPost",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 12745,
                                              "src": "4838:21:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 13029,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 13028,
                                              "name": "idx",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 12979,
                                              "src": "4860:3:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "4838:26:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                              "typeString": "struct Controller.GlobalConstraint storage ref"
                                            }
                                          },
                                          "id": 13030,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "gcAddress",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 12719,
                                          "src": "4838:36:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 13026,
                                        "name": "GlobalConstraintInterface",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 14504,
                                        "src": "4812:25:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                          "typeString": "type(contract GlobalConstraintInterface)"
                                        }
                                      },
                                      "id": 13031,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4812:63:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_GlobalConstraintInterface_$14504",
                                        "typeString": "contract GlobalConstraintInterface"
                                      }
                                    }
                                  ],
                                  "id": 13032,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "4811:65:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GlobalConstraintInterface_$14504",
                                    "typeString": "contract GlobalConstraintInterface"
                                  }
                                },
                                "id": 13033,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 14498,
                                "src": "4811:83:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                                  "typeString": "function (address,bytes32,bytes32) external returns (bool)"
                                }
                              },
                              "id": 13041,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4811:136:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 13025,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22174,
                            "src": "4790:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 13042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4790:158:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13043,
                        "nodeType": "ExpressionStatement",
                        "src": "4790:158:52"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13018,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12979,
                      "src": "4733:3:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 13019,
                        "name": "globalConstraintsPost",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12745,
                        "src": "4739:21:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                          "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                        }
                      },
                      "id": 13020,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4739:28:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4733:34:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13045,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 13016,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 13014,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12979,
                        "src": "4724:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 13015,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4730:1:52",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4724:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13017,
                    "nodeType": "ExpressionStatement",
                    "src": "4724:7:52"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 13023,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4769:5:52",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 13022,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12979,
                        "src": "4769:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13024,
                    "nodeType": "ExpressionStatement",
                    "src": "4769:5:52"
                  },
                  "nodeType": "ForStatement",
                  "src": "4719:240:52"
                }
              ]
            },
            "documentation": null,
            "id": 13047,
            "name": "onlySubjectToConstraint",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12977,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12976,
                  "name": "func",
                  "nodeType": "VariableDeclaration",
                  "scope": 13047,
                  "src": "4418:12:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12975,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4418:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4417:14:52"
            },
            "src": "4385:580:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13060,
              "nodeType": "Block",
              "src": "5011:63:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13056,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13052,
                          "name": "_avatar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13049,
                          "src": "5029:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 13054,
                              "name": "avatar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12733,
                              "src": "5048:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Avatar_$12705",
                                "typeString": "contract Avatar"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Avatar_$12705",
                                "typeString": "contract Avatar"
                              }
                            ],
                            "id": 13053,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5040:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 13055,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5040:15:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "5029:26:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13051,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "5021:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13057,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5021:35:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13058,
                  "nodeType": "ExpressionStatement",
                  "src": "5021:35:52"
                },
                {
                  "id": 13059,
                  "nodeType": "PlaceholderStatement",
                  "src": "5066:1:52"
                }
              ]
            },
            "documentation": null,
            "id": 13061,
            "name": "isAvatarValid",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 13050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13049,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13061,
                  "src": "4994:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13048,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4994:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4993:17:52"
            },
            "src": "4971:103:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13093,
              "nodeType": "Block",
              "src": "5507:114:52",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13081,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "5537:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13082,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5537:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13083,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13065,
                        "src": "5549:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13084,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13063,
                        "src": "5554:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13080,
                      "name": "MintReputation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12761,
                      "src": "5522:14:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 13085,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5522:40:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13086,
                  "nodeType": "EmitStatement",
                  "src": "5517:45:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13089,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13065,
                        "src": "5601:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13090,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13063,
                        "src": "5606:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13087,
                        "name": "nativeReputation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12737,
                        "src": "5579:16:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Reputation_$16423",
                          "typeString": "contract Reputation"
                        }
                      },
                      "id": 13088,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16185,
                      "src": "5579:21:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 13091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5579:35:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13079,
                  "id": 13092,
                  "nodeType": "Return",
                  "src": "5572:42:52"
                }
              ]
            },
            "documentation": "@dev Mint `_amount` of reputation that are assigned to `_to` .\n@param  _amount amount of reputation to mint\n@param _to beneficiary address\n@return bool which represents a success",
            "id": 13094,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13070,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13069,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12874,
                  "src": "5391:20:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5391:20:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "6d696e7452657075746174696f6e",
                    "id": 13072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5440:16:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_1a219662897983599a6b9002ff87ae94af2205e820352b0884d9af0be457f05d",
                      "typeString": "literal_string \"mintReputation\""
                    },
                    "value": "mintReputation"
                  }
                ],
                "id": 13073,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13071,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "5416:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5416:41:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13075,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13067,
                    "src": "5476:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13076,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13074,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "5462:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5462:22:52"
              }
            ],
            "name": "mintReputation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13068,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13063,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13094,
                  "src": "5327:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13062,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5327:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13065,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 13094,
                  "src": "5344:11:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13064,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5344:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13067,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13094,
                  "src": "5357:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13066,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5357:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5326:47:52"
            },
            "returnParameters": {
              "id": 13079,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13078,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13094,
                  "src": "5497:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13077,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5497:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5496:6:52"
            },
            "scope": 14161,
            "src": "5303:318:52",
            "stateMutability": "nonpayable",
            "superFunction": 14176,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13126,
              "nodeType": "Block",
              "src": "6064:118:52",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13114,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "6094:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13115,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6094:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13116,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13098,
                        "src": "6106:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13117,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13096,
                        "src": "6113:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13113,
                      "name": "BurnReputation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12769,
                      "src": "6079:14:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 13118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6079:42:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13119,
                  "nodeType": "EmitStatement",
                  "src": "6074:47:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13122,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13098,
                        "src": "6160:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13123,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13096,
                        "src": "6167:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13120,
                        "name": "nativeReputation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12737,
                        "src": "6138:16:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Reputation_$16423",
                          "typeString": "contract Reputation"
                        }
                      },
                      "id": 13121,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16244,
                      "src": "6138:21:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 13124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6138:37:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13112,
                  "id": 13125,
                  "nodeType": "Return",
                  "src": "6131:44:52"
                }
              ]
            },
            "documentation": "@dev Burns `_amount` of reputation from `_from`\n@param _amount amount of reputation to burn\n@param _from The address that will lose the reputation\n@return bool which represents a success",
            "id": 13127,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13103,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13102,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12874,
                  "src": "5948:20:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5948:20:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "6275726e52657075746174696f6e",
                    "id": 13105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5997:16:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_701c6a9b3c30976c567c709256889545b87c2151a8fd377ac6f0366a5ce4dd74",
                      "typeString": "literal_string \"burnReputation\""
                    },
                    "value": "burnReputation"
                  }
                ],
                "id": 13106,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13104,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "5973:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5973:41:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13108,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13100,
                    "src": "6033:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13109,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13107,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "6019:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6019:22:52"
              }
            ],
            "name": "burnReputation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13101,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13096,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13127,
                  "src": "5882:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13095,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5882:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13098,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 13127,
                  "src": "5899:13:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13097,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5899:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13100,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13127,
                  "src": "5914:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13099,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5914:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5881:49:52"
            },
            "returnParameters": {
              "id": 13112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13111,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13127,
                  "src": "6054:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13110,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6054:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6053:6:52"
            },
            "scope": 14161,
            "src": "5858:324:52",
            "stateMutability": "nonpayable",
            "superFunction": 14187,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13159,
              "nodeType": "Block",
              "src": "6576:123:52",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13147,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "6602:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6602:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13149,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13131,
                        "src": "6614:12:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13150,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13129,
                        "src": "6628:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13146,
                      "name": "MintTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12777,
                      "src": "6591:10:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 13151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6591:45:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13152,
                  "nodeType": "EmitStatement",
                  "src": "6586:50:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13155,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13131,
                        "src": "6670:12:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13156,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13129,
                        "src": "6684:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13153,
                        "name": "nativeToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12735,
                        "src": "6653:11:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DAOToken_$14470",
                          "typeString": "contract DAOToken"
                        }
                      },
                      "id": 13154,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14469,
                      "src": "6653:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 13157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6653:39:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13145,
                  "id": 13158,
                  "nodeType": "Return",
                  "src": "6646:46:52"
                }
              ]
            },
            "documentation": "@dev mint tokens .\n@param  _amount amount of token to mint\n@param _beneficiary beneficiary address\n@return bool which represents a success",
            "id": 13160,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13136,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13135,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12874,
                  "src": "6464:20:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6464:20:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "6d696e74546f6b656e73",
                    "id": 13138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6513:12:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_21b23862db72e99373f312e35ae4594cf48c0e3462d6964e450d863eb9283120",
                      "typeString": "literal_string \"mintTokens\""
                    },
                    "value": "mintTokens"
                  }
                ],
                "id": 13139,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13137,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "6489:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6489:37:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13141,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13133,
                    "src": "6545:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13142,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13140,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "6531:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6531:22:52"
              }
            ],
            "name": "mintTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13129,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13160,
                  "src": "6391:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13128,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6391:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13131,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13160,
                  "src": "6408:20:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13130,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6408:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13133,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13160,
                  "src": "6430:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13132,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6430:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6390:56:52"
            },
            "returnParameters": {
              "id": 13145,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13144,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13160,
                  "src": "6566:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13143,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6566:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6565:6:52"
            },
            "scope": 14161,
            "src": "6371:328:52",
            "stateMutability": "nonpayable",
            "superFunction": 14198,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13259,
              "nodeType": "Block",
              "src": "7211:876:52",
              "statements": [
                {
                  "assignments": [
                    13182
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13182,
                      "name": "scheme",
                      "nodeType": "VariableDeclaration",
                      "scope": 13259,
                      "src": "7222:20:52",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$12717_memory_ptr",
                        "typeString": "struct Controller.Scheme"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13181,
                        "name": "Scheme",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 12717,
                        "src": "7222:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Scheme_$12717_storage_ptr",
                          "typeString": "struct Controller.Scheme"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13186,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 13183,
                      "name": "schemes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12731,
                      "src": "7245:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                        "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                      }
                    },
                    "id": 13185,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 13184,
                      "name": "_scheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13162,
                      "src": "7253:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7245:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                      "typeString": "struct Controller.Scheme storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7222:39:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 13208,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 13204,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 13196,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30783030303030303166",
                                  "id": 13189,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7567:10:52",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_31_by_1",
                                    "typeString": "int_const 31"
                                  },
                                  "value": "0x0000001f"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_31_by_1",
                                    "typeString": "int_const 31"
                                  }
                                ],
                                "id": 13188,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7560:6:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes4_$",
                                  "typeString": "type(bytes4)"
                                },
                                "typeName": "bytes4"
                              },
                              "id": 13190,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7560:18:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "id": 13194,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 13191,
                                    "name": "_permissions",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13166,
                                    "src": "7580:12:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "^",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13192,
                                      "name": "scheme",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13182,
                                      "src": "7593:6:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Scheme_$12717_memory_ptr",
                                        "typeString": "struct Controller.Scheme memory"
                                      }
                                    },
                                    "id": 13193,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "permissions",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 12716,
                                    "src": "7593:18:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "src": "7580:31:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                }
                              ],
                              "id": 13195,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "7579:33:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "src": "7560:52:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 13202,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "~",
                                "prefix": true,
                                "src": "7614:32:52",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 13197,
                                      "name": "schemes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12731,
                                      "src": "7615:7:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                        "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                      }
                                    },
                                    "id": 13200,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 13198,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 22171,
                                        "src": "7623:3:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 13199,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "7623:10:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "7615:19:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                      "typeString": "struct Controller.Scheme storage ref"
                                    }
                                  },
                                  "id": 13201,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "permissions",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12716,
                                  "src": "7615:31:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "id": 13203,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "7613:34:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "7560:87:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13206,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7658:1:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 13205,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7651:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 13207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7651:9:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "7560:100:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13187,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "7552:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7552:109:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13210,
                  "nodeType": "ExpressionStatement",
                  "src": "7552:109:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 13230,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 13226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303166",
                                "id": 13213,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7771:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x0000001f"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                }
                              ],
                              "id": 13212,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7764:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 13214,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7764:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 13224,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13215,
                                    "name": "scheme",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13182,
                                    "src": "7784:6:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Scheme_$12717_memory_ptr",
                                      "typeString": "struct Controller.Scheme memory"
                                    }
                                  },
                                  "id": 13216,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "permissions",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12716,
                                  "src": "7784:18:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 13222,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "~",
                                      "prefix": true,
                                      "src": "7804:32:52",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 13217,
                                            "name": "schemes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12731,
                                            "src": "7805:7:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                              "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                            }
                                          },
                                          "id": 13220,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 13218,
                                              "name": "msg",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 22171,
                                              "src": "7813:3:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                              }
                                            },
                                            "id": 13219,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "7813:10:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address_payable",
                                              "typeString": "address payable"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "7805:19:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                            "typeString": "struct Controller.Scheme storage ref"
                                          }
                                        },
                                        "id": 13221,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "permissions",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 12716,
                                        "src": "7805:31:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    }
                                  ],
                                  "id": 13223,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7803:34:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "7784:53:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "id": 13225,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "7783:55:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "7764:74:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13228,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7849:1:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 13227,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7842:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 13229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7842:9:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "7764:87:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13211,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "7756:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7756:96:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13232,
                  "nodeType": "ExpressionStatement",
                  "src": "7756:96:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 13233,
                          "name": "schemes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12731,
                          "src": "7896:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                            "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                          }
                        },
                        "id": 13235,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 13234,
                          "name": "_scheme",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13162,
                          "src": "7904:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7896:16:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                          "typeString": "struct Controller.Scheme storage ref"
                        }
                      },
                      "id": 13236,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "paramsHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12714,
                      "src": "7896:27:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13237,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13164,
                      "src": "7926:11:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "7896:41:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 13239,
                  "nodeType": "ExpressionStatement",
                  "src": "7896:41:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 13240,
                          "name": "schemes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12731,
                          "src": "7947:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                            "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                          }
                        },
                        "id": 13242,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 13241,
                          "name": "_scheme",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13162,
                          "src": "7955:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7947:16:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                          "typeString": "struct Controller.Scheme storage ref"
                        }
                      },
                      "id": 13243,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "permissions",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12716,
                      "src": "7947:28:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 13248,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 13244,
                        "name": "_permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13166,
                        "src": "7978:12:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30783030303030303031",
                            "id": 13246,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7998:10:52",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "0x00000001"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            }
                          ],
                          "id": 13245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7991:6:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes4_$",
                            "typeString": "type(bytes4)"
                          },
                          "typeName": "bytes4"
                        },
                        "id": 13247,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7991:18:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "7978:31:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "7947:62:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "id": 13250,
                  "nodeType": "ExpressionStatement",
                  "src": "7947:62:52"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13252,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "8039:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8039:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13254,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13162,
                        "src": "8051:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13251,
                      "name": "RegisterScheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12783,
                      "src": "8024:14:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 13255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8024:35:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13256,
                  "nodeType": "EmitStatement",
                  "src": "8019:40:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 13257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8076:4:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 13180,
                  "id": 13258,
                  "nodeType": "Return",
                  "src": "8069:11:52"
                }
              ]
            },
            "documentation": "@dev register a scheme\n@param _scheme the address of the scheme\n@param _paramsHash a hashed configuration of the usage of the scheme\n@param _permissions the permissions the new scheme will have\n@return bool which represents a success",
            "id": 13260,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13171,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13170,
                  "name": "onlyRegisteringSchemes",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12894,
                  "src": "7093:22:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7093:22:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "7265676973746572536368656d65",
                    "id": 13173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7144:16:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_c6de131411a6b4c4ab26bd5c5ac65f44cdd792220de1a6733d66d35c3433e601",
                      "typeString": "literal_string \"registerScheme\""
                    },
                    "value": "registerScheme"
                  }
                ],
                "id": 13174,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13172,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "7120:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7120:41:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13176,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13168,
                    "src": "7180:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13177,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13175,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "7166:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7166:22:52"
              }
            ],
            "name": "registerScheme",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13162,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 13260,
                  "src": "7000:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13161,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7000:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13164,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 13260,
                  "src": "7017:19:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13163,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7017:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13166,
                  "name": "_permissions",
                  "nodeType": "VariableDeclaration",
                  "scope": 13260,
                  "src": "7038:19:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 13165,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "7038:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13168,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13260,
                  "src": "7059:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13167,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7059:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6999:76:52"
            },
            "returnParameters": {
              "id": 13180,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13179,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13260,
                  "src": "7201:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13178,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7201:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7200:6:52"
            },
            "scope": 14161,
            "src": "6976:1111:52",
            "stateMutability": "nonpayable",
            "superFunction": 14211,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13323,
              "nodeType": "Block",
              "src": "8434:440:52",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13278,
                          "name": "_scheme",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13262,
                          "src": "8508:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 13277,
                        "name": "_isSchemeRegistered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14160,
                        "src": "8488:19:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 13279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8488:28:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 13280,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8520:5:52",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "8488:37:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13285,
                  "nodeType": "IfStatement",
                  "src": "8484:80:52",
                  "trueBody": {
                    "id": 13284,
                    "nodeType": "Block",
                    "src": "8527:37:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 13282,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8548:5:52",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 13276,
                        "id": 13283,
                        "nodeType": "Return",
                        "src": "8541:12:52"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 13307,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 13303,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303166",
                                "id": 13288,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8650:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x0000001f"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                }
                              ],
                              "id": 13287,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8643:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 13289,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8643:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 13301,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 13290,
                                      "name": "schemes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12731,
                                      "src": "8663:7:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                        "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                      }
                                    },
                                    "id": 13292,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 13291,
                                      "name": "_scheme",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13262,
                                      "src": "8671:7:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "8663:16:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                      "typeString": "struct Controller.Scheme storage ref"
                                    }
                                  },
                                  "id": 13293,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "permissions",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12716,
                                  "src": "8663:28:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 13299,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "~",
                                      "prefix": true,
                                      "src": "8693:32:52",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 13294,
                                            "name": "schemes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12731,
                                            "src": "8694:7:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                              "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                            }
                                          },
                                          "id": 13297,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 13295,
                                              "name": "msg",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 22171,
                                              "src": "8702:3:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                              }
                                            },
                                            "id": 13296,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "8702:10:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address_payable",
                                              "typeString": "address payable"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "8694:19:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                            "typeString": "struct Controller.Scheme storage ref"
                                          }
                                        },
                                        "id": 13298,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "permissions",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 12716,
                                        "src": "8694:31:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    }
                                  ],
                                  "id": 13300,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8692:34:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "8663:63:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "id": 13302,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "8662:65:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "8643:84:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13305,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8738:1:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 13304,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8731:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 13306,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8731:9:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "8643:97:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13286,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "8635:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8635:106:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13309,
                  "nodeType": "ExpressionStatement",
                  "src": "8635:106:52"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13311,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "8793:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8793:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13313,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13262,
                        "src": "8805:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13310,
                      "name": "UnregisterScheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12789,
                      "src": "8776:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 13314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8776:37:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13315,
                  "nodeType": "EmitStatement",
                  "src": "8771:42:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8823:23:52",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13316,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12731,
                        "src": "8830:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 13318,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 13317,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13262,
                        "src": "8838:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8830:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13320,
                  "nodeType": "ExpressionStatement",
                  "src": "8823:23:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 13321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8863:4:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 13276,
                  "id": 13322,
                  "nodeType": "Return",
                  "src": "8856:11:52"
                }
              ]
            },
            "documentation": "@dev unregister a scheme\n@param _scheme the address of the scheme\n@return bool which represents a success",
            "id": 13324,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13267,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13266,
                  "name": "onlyRegisteringSchemes",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12894,
                  "src": "8314:22:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8314:22:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "756e7265676973746572536368656d65",
                    "id": 13269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8365:18:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b691bb484251ef01d241995950a354987a3e0c00fe2381f87b564ec41aab942c",
                      "typeString": "literal_string \"unregisterScheme\""
                    },
                    "value": "unregisterScheme"
                  }
                ],
                "id": 13270,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13268,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "8341:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8341:43:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13272,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13264,
                    "src": "8403:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13273,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13271,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "8389:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8389:22:52"
              }
            ],
            "name": "unregisterScheme",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13265,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13262,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 13324,
                  "src": "8263:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13261,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8263:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13264,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13324,
                  "src": "8280:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13263,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8280:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8261:35:52"
            },
            "returnParameters": {
              "id": 13276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13275,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13324,
                  "src": "8424:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13274,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8424:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8423:6:52"
            },
            "scope": 14161,
            "src": "8236:638:52",
            "stateMutability": "nonpayable",
            "superFunction": 14220,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13359,
              "nodeType": "Block",
              "src": "9073:211:52",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13335,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22171,
                            "src": "9107:3:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 13336,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9107:10:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 13334,
                        "name": "_isSchemeRegistered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14160,
                        "src": "9087:19:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 13337,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9087:31:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 13338,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9122:5:52",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "9087:40:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13343,
                  "nodeType": "IfStatement",
                  "src": "9083:83:52",
                  "trueBody": {
                    "id": 13342,
                    "nodeType": "Block",
                    "src": "9129:37:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 13340,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9150:5:52",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 13333,
                        "id": 13341,
                        "nodeType": "Return",
                        "src": "9143:12:52"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "9175:26:52",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13344,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12731,
                        "src": "9182:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 13347,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13345,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9190:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13346,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9190:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9182:19:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13349,
                  "nodeType": "ExpressionStatement",
                  "src": "9175:26:52"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13351,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9233:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9233:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13353,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9245:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13354,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9245:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 13350,
                      "name": "UnregisterScheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12789,
                      "src": "9216:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 13355,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9216:40:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13356,
                  "nodeType": "EmitStatement",
                  "src": "9211:45:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 13357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9273:4:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 13333,
                  "id": 13358,
                  "nodeType": "Return",
                  "src": "9266:11:52"
                }
              ]
            },
            "documentation": "@dev unregister the caller's scheme\n@return bool which represents a success",
            "id": 13360,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13329,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13326,
                    "src": "9050:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13330,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13328,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "9036:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9036:22:52"
              }
            ],
            "name": "unregisterSelf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13326,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13360,
                  "src": "9010:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13325,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9010:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9009:17:52"
            },
            "returnParameters": {
              "id": 13333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13332,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13360,
                  "src": "9067:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13331,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9067:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9066:6:52"
            },
            "scope": 14161,
            "src": "8986:298:52",
            "stateMutability": "nonpayable",
            "superFunction": 14227,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13502,
              "nodeType": "Block",
              "src": "9717:1417:52",
              "statements": [
                {
                  "assignments": [
                    13379
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13379,
                      "name": "when",
                      "nodeType": "VariableDeclaration",
                      "scope": 13502,
                      "src": "9727:40:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_CallPhase_$14476",
                        "typeString": "enum GlobalConstraintInterface.CallPhase"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13378,
                        "name": "GlobalConstraintInterface.CallPhase",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14476,
                        "src": "9727:35:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_CallPhase_$14476",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13385,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13381,
                            "name": "_globalConstraint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13362,
                            "src": "9796:17:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 13380,
                          "name": "GlobalConstraintInterface",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14504,
                          "src": "9770:25:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                            "typeString": "type(contract GlobalConstraintInterface)"
                          }
                        },
                        "id": 13382,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9770:44:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GlobalConstraintInterface_$14504",
                          "typeString": "contract GlobalConstraintInterface"
                        }
                      },
                      "id": 13383,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "when",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14503,
                      "src": "9770:49:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_enum$_CallPhase_$14476_$",
                        "typeString": "function () external returns (enum GlobalConstraintInterface.CallPhase)"
                      }
                    },
                    "id": 13384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9770:51:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_CallPhase_$14476",
                      "typeString": "enum GlobalConstraintInterface.CallPhase"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9727:94:52"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13398,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13390,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13386,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13379,
                            "src": "9836:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13387,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "9844:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13388,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "9844:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13389,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "9844:39:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "9836:47:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13391,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "9835:49:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13396,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13392,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13379,
                            "src": "9900:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13393,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "9908:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13394,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "9908:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13395,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "9908:46:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "9900:54:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13397,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "9899:56:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9835:120:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13439,
                  "nodeType": "IfStatement",
                  "src": "9831:596:52",
                  "trueBody": {
                    "id": 13438,
                    "nodeType": "Block",
                    "src": "9957:470:52",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 13403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "9975:61:52",
                          "subExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 13399,
                                "name": "globalConstraintsRegisterPre",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12749,
                                "src": "9976:28:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                  "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                }
                              },
                              "id": 13401,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 13400,
                                "name": "_globalConstraint",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13362,
                                "src": "10005:17:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9976:47:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                              }
                            },
                            "id": 13402,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isRegistered",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12724,
                            "src": "9976:60:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 13436,
                          "nodeType": "Block",
                          "src": "10292:125:52",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13434,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 13426,
                                      "name": "globalConstraintsPre",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12742,
                                      "src": "10310:20:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 13431,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 13427,
                                          "name": "globalConstraintsRegisterPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12749,
                                          "src": "10331:28:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                            "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                          }
                                        },
                                        "id": 13429,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 13428,
                                          "name": "_globalConstraint",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13362,
                                          "src": "10360:17:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "10331:47:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                          "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                        }
                                      },
                                      "id": 13430,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "index",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 12726,
                                      "src": "10331:53:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10310:75:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 13432,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12721,
                                  "src": "10310:82:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 13433,
                                  "name": "_params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13364,
                                  "src": "10395:7:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "10310:92:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 13435,
                              "nodeType": "ExpressionStatement",
                              "src": "10310:92:52"
                            }
                          ]
                        },
                        "id": 13437,
                        "nodeType": "IfStatement",
                        "src": "9971:446:52",
                        "trueBody": {
                          "id": 13425,
                          "nodeType": "Block",
                          "src": "10038:249:52",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 13408,
                                        "name": "_globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13362,
                                        "src": "10099:17:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 13409,
                                        "name": "_params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13364,
                                        "src": "10118:7:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 13407,
                                      "name": "GlobalConstraint",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12722,
                                      "src": "10082:16:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_struct$_GlobalConstraint_$12722_storage_ptr_$",
                                        "typeString": "type(struct Controller.GlobalConstraint storage pointer)"
                                      }
                                    },
                                    "id": 13410,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "structConstructorCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10082:44:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13404,
                                    "name": "globalConstraintsPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12742,
                                    "src": "10056:20:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 13406,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "10056:25:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_GlobalConstraint_$12722_storage_$returns$_t_uint256_$",
                                    "typeString": "function (struct Controller.GlobalConstraint storage ref) returns (uint256)"
                                  }
                                },
                                "id": 13411,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10056:71:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 13412,
                              "nodeType": "ExpressionStatement",
                              "src": "10056:71:52"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13423,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 13413,
                                    "name": "globalConstraintsRegisterPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12749,
                                    "src": "10145:28:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 13415,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 13414,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13362,
                                    "src": "10174:17:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "10145:47:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "74727565",
                                      "id": 13417,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10236:4:52",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "true"
                                    },
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 13421,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 13418,
                                          "name": "globalConstraintsPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12742,
                                          "src": "10242:20:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 13419,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "10242:27:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 13420,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10270:1:52",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "10242:29:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 13416,
                                    "name": "GlobalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12727,
                                    "src": "10211:24:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_struct$_GlobalConstraintRegister_$12727_storage_ptr_$",
                                      "typeString": "type(struct Controller.GlobalConstraintRegister storage pointer)"
                                    }
                                  },
                                  "id": 13422,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "structConstructorCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10211:61:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory",
                                    "typeString": "struct Controller.GlobalConstraintRegister memory"
                                  }
                                },
                                "src": "10145:127:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                  "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                }
                              },
                              "id": 13424,
                              "nodeType": "ExpressionStatement",
                              "src": "10145:127:52"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13452,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13440,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13379,
                            "src": "10441:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13441,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "10449:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13442,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "10449:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13443,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "10449:40:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "10441:48:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13445,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "10440:50:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13446,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13379,
                            "src": "10506:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13447,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "10514:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13448,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "10514:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13449,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "10514:46:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "10506:54:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13451,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "10505:56:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10440:121:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13493,
                  "nodeType": "IfStatement",
                  "src": "10436:603:52",
                  "trueBody": {
                    "id": 13492,
                    "nodeType": "Block",
                    "src": "10563:476:52",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 13457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "10581:62:52",
                          "subExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 13453,
                                "name": "globalConstraintsRegisterPost",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12753,
                                "src": "10582:29:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                  "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                }
                              },
                              "id": 13455,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 13454,
                                "name": "_globalConstraint",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13362,
                                "src": "10612:17:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10582:48:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                              }
                            },
                            "id": 13456,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isRegistered",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12724,
                            "src": "10582:61:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 13490,
                          "nodeType": "Block",
                          "src": "10902:127:52",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13488,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 13480,
                                      "name": "globalConstraintsPost",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12745,
                                      "src": "10920:21:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 13485,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 13481,
                                          "name": "globalConstraintsRegisterPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12753,
                                          "src": "10942:29:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                            "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                          }
                                        },
                                        "id": 13483,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 13482,
                                          "name": "_globalConstraint",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13362,
                                          "src": "10972:17:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "10942:48:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                          "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                        }
                                      },
                                      "id": 13484,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "index",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 12726,
                                      "src": "10942:54:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10920:77:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 13486,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12721,
                                  "src": "10920:84:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 13487,
                                  "name": "_params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13364,
                                  "src": "11007:7:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "10920:94:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 13489,
                              "nodeType": "ExpressionStatement",
                              "src": "10920:94:52"
                            }
                          ]
                        },
                        "id": 13491,
                        "nodeType": "IfStatement",
                        "src": "10577:452:52",
                        "trueBody": {
                          "id": 13479,
                          "nodeType": "Block",
                          "src": "10645:252:52",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 13462,
                                        "name": "_globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13362,
                                        "src": "10707:17:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 13463,
                                        "name": "_params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13364,
                                        "src": "10726:7:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 13461,
                                      "name": "GlobalConstraint",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12722,
                                      "src": "10690:16:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_struct$_GlobalConstraint_$12722_storage_ptr_$",
                                        "typeString": "type(struct Controller.GlobalConstraint storage pointer)"
                                      }
                                    },
                                    "id": 13464,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "structConstructorCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10690:44:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13458,
                                    "name": "globalConstraintsPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12745,
                                    "src": "10663:21:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 13460,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "10663:26:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_GlobalConstraint_$12722_storage_$returns$_t_uint256_$",
                                    "typeString": "function (struct Controller.GlobalConstraint storage ref) returns (uint256)"
                                  }
                                },
                                "id": 13465,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10663:72:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 13466,
                              "nodeType": "ExpressionStatement",
                              "src": "10663:72:52"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13477,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 13467,
                                    "name": "globalConstraintsRegisterPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12753,
                                    "src": "10753:29:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 13469,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 13468,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13362,
                                    "src": "10783:17:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "10753:48:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "74727565",
                                      "id": 13471,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10845:4:52",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "true"
                                    },
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 13475,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 13472,
                                          "name": "globalConstraintsPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12745,
                                          "src": "10851:21:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 13473,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "10851:28:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 13474,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10880:1:52",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "10851:30:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 13470,
                                    "name": "GlobalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12727,
                                    "src": "10820:24:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_struct$_GlobalConstraintRegister_$12727_storage_ptr_$",
                                      "typeString": "type(struct Controller.GlobalConstraintRegister storage pointer)"
                                    }
                                  },
                                  "id": 13476,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "structConstructorCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10820:62:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory",
                                    "typeString": "struct Controller.GlobalConstraintRegister memory"
                                  }
                                },
                                "src": "10753:129:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                  "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                }
                              },
                              "id": 13478,
                              "nodeType": "ExpressionStatement",
                              "src": "10753:129:52"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13495,
                        "name": "_globalConstraint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13362,
                        "src": "11073:17:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13496,
                        "name": "_params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13364,
                        "src": "11092:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13497,
                        "name": "when",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13379,
                        "src": "11101:4:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_CallPhase_$14476",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_enum$_CallPhase_$14476",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      ],
                      "id": 13494,
                      "name": "AddGlobalConstraint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12803,
                      "src": "11053:19:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_enum$_CallPhase_$14476_$returns$__$",
                        "typeString": "function (address,bytes32,enum GlobalConstraintInterface.CallPhase)"
                      }
                    },
                    "id": 13498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11053:53:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13499,
                  "nodeType": "EmitStatement",
                  "src": "11048:58:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 13500,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11123:4:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 13375,
                  "id": 13501,
                  "nodeType": "Return",
                  "src": "11116:11:52"
                }
              ]
            },
            "documentation": "@dev add or update Global Constraint\n@param _globalConstraint the address of the global constraint to be added.\n@param _params the constraint parameters hash.\n@return bool which represents a success",
            "id": 13503,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13369,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13368,
                  "name": "onlyGlobalConstraintsScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12914,
                  "src": "9640:27:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9640:27:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13371,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13366,
                    "src": "9686:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13372,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13370,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "9672:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9672:22:52"
              }
            ],
            "name": "addGlobalConstraint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13367,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13362,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 13503,
                  "src": "9562:25:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13361,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9562:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13364,
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 13503,
                  "src": "9589:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13363,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9589:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13366,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13503,
                  "src": "9606:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13365,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9606:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9561:61:52"
            },
            "returnParameters": {
              "id": 13375,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13374,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13503,
                  "src": "9707:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13373,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9707:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9706:6:52"
            },
            "scope": 14161,
            "src": "9533:1601:52",
            "stateMutability": "nonpayable",
            "superFunction": 14238,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13699,
              "nodeType": "Block",
              "src": "11544:2234:52",
              "statements": [
                {
                  "assignments": [
                    13518
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13518,
                      "name": "globalConstraintRegister",
                      "nodeType": "VariableDeclaration",
                      "scope": 13699,
                      "src": "11554:56:52",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13517,
                        "name": "GlobalConstraintRegister",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 12727,
                        "src": "11554:24:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage_ptr",
                          "typeString": "struct Controller.GlobalConstraintRegister"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13519,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11554:56:52"
                },
                {
                  "assignments": [
                    13521
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13521,
                      "name": "globalConstraint",
                      "nodeType": "VariableDeclaration",
                      "scope": 13699,
                      "src": "11620:40:52",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraint"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13520,
                        "name": "GlobalConstraint",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 12722,
                        "src": "11620:16:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage_ptr",
                          "typeString": "struct Controller.GlobalConstraint"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13522,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11620:40:52"
                },
                {
                  "assignments": [
                    13526
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13526,
                      "name": "when",
                      "nodeType": "VariableDeclaration",
                      "scope": 13699,
                      "src": "11670:40:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_CallPhase_$14476",
                        "typeString": "enum GlobalConstraintInterface.CallPhase"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13525,
                        "name": "GlobalConstraintInterface.CallPhase",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14476,
                        "src": "11670:35:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_CallPhase_$14476",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13532,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13528,
                            "name": "_globalConstraint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13505,
                            "src": "11739:17:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 13527,
                          "name": "GlobalConstraintInterface",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14504,
                          "src": "11713:25:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                            "typeString": "type(contract GlobalConstraintInterface)"
                          }
                        },
                        "id": 13529,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11713:44:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GlobalConstraintInterface_$14504",
                          "typeString": "contract GlobalConstraintInterface"
                        }
                      },
                      "id": 13530,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "when",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14503,
                      "src": "11713:49:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_enum$_CallPhase_$14476_$",
                        "typeString": "function () external returns (enum GlobalConstraintInterface.CallPhase)"
                      }
                    },
                    "id": 13531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11713:51:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_CallPhase_$14476",
                      "typeString": "enum GlobalConstraintInterface.CallPhase"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11670:94:52"
                },
                {
                  "assignments": [
                    13534
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13534,
                      "name": "retVal",
                      "nodeType": "VariableDeclaration",
                      "scope": 13699,
                      "src": "11774:11:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 13533,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "11774:4:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13536,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 13535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11788:5:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11774:19:52"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13537,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13526,
                            "src": "11809:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13538,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "11817:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13539,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "11817:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13540,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "11817:39:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "11809:47:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13542,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "11808:49:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13543,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13526,
                            "src": "11873:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13544,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "11881:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13545,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "11881:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13546,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "11881:46:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "11873:54:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13548,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "11872:56:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11808:120:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13609,
                  "nodeType": "IfStatement",
                  "src": "11804:852:52",
                  "trueBody": {
                    "id": 13608,
                    "nodeType": "Block",
                    "src": "11930:726:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 13554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 13550,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13518,
                            "src": "11944:24:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 13551,
                              "name": "globalConstraintsRegisterPre",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12749,
                              "src": "11971:28:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 13553,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 13552,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13505,
                              "src": "12000:17:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11971:47:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "src": "11944:74:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                          }
                        },
                        "id": 13555,
                        "nodeType": "ExpressionStatement",
                        "src": "11944:74:52"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13556,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13518,
                            "src": "12036:24:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "id": 13557,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12724,
                          "src": "12036:37:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 13607,
                        "nodeType": "IfStatement",
                        "src": "12032:614:52",
                        "trueBody": {
                          "id": 13606,
                          "nodeType": "Block",
                          "src": "12075:571:52",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 13564,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13558,
                                    "name": "globalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13518,
                                    "src": "12097:24:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                      "typeString": "struct Controller.GlobalConstraintRegister memory"
                                    }
                                  },
                                  "id": 13559,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "index",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12726,
                                  "src": "12097:30:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 13563,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13560,
                                      "name": "globalConstraintsPre",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12742,
                                      "src": "12130:20:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 13561,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "12130:27:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 13562,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12158:1:52",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "12130:29:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "12097:62:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 13591,
                              "nodeType": "IfStatement",
                              "src": "12093:389:52",
                              "trueBody": {
                                "id": 13590,
                                "nodeType": "Block",
                                "src": "12161:321:52",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13572,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 13565,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13521,
                                        "src": "12183:16:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 13566,
                                          "name": "globalConstraintsPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12742,
                                          "src": "12202:20:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 13571,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 13570,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 13567,
                                              "name": "globalConstraintsPre",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 12742,
                                              "src": "12223:20:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 13568,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "12223:27:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 13569,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "12251:1:52",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "12223:29:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "12202:51:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "src": "12183:70:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                        "typeString": "struct Controller.GlobalConstraint memory"
                                      }
                                    },
                                    "id": 13573,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12183:70:52"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13579,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 13574,
                                          "name": "globalConstraintsPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12742,
                                          "src": "12275:20:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 13577,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 13575,
                                            "name": "globalConstraintRegister",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 13518,
                                            "src": "12296:24:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                                            }
                                          },
                                          "id": 13576,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "index",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 12726,
                                          "src": "12296:30:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "12275:52:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 13578,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13521,
                                        "src": "12330:16:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "src": "12275:71:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref"
                                      }
                                    },
                                    "id": 13580,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12275:71:52"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13588,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 13581,
                                            "name": "globalConstraintsRegisterPre",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12749,
                                            "src": "12368:28:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                            }
                                          },
                                          "id": 13584,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 13582,
                                              "name": "globalConstraint",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 13521,
                                              "src": "12397:16:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                                "typeString": "struct Controller.GlobalConstraint memory"
                                              }
                                            },
                                            "id": 13583,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "gcAddress",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12719,
                                            "src": "12397:26:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "12368:56:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                            "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                          }
                                        },
                                        "id": 13585,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 12726,
                                        "src": "12368:62:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 13586,
                                          "name": "globalConstraintRegister",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13518,
                                          "src": "12433:24:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                                          }
                                        },
                                        "id": 13587,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 12726,
                                        "src": "12433:30:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12368:95:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 13589,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12368:95:52"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13595,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "--",
                                "prefix": false,
                                "src": "12499:29:52",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13592,
                                    "name": "globalConstraintsPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12742,
                                    "src": "12499:20:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 13594,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "12499:27:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 13596,
                              "nodeType": "ExpressionStatement",
                              "src": "12499:29:52"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13600,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "12546:54:52",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 13597,
                                    "name": "globalConstraintsRegisterPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12749,
                                    "src": "12553:28:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 13599,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 13598,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13505,
                                    "src": "12582:17:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "12553:47:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 13601,
                              "nodeType": "ExpressionStatement",
                              "src": "12546:54:52"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13604,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 13602,
                                  "name": "retVal",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13534,
                                  "src": "12618:6:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 13603,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12627:4:52",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "12618:13:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 13605,
                              "nodeType": "ExpressionStatement",
                              "src": "12618:13:52"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13622,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13614,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13610,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13526,
                            "src": "12670:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13611,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "12678:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13612,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "12678:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13613,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "12678:40:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "12670:48:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13615,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "12669:50:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13616,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13526,
                            "src": "12735:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13617,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "12743:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13618,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "12743:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13619,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "12743:46:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "12735:54:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13621,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "12734:56:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "12669:121:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13682,
                  "nodeType": "IfStatement",
                  "src": "12665:861:52",
                  "trueBody": {
                    "id": 13681,
                    "nodeType": "Block",
                    "src": "12792:734:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 13627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 13623,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13518,
                            "src": "12806:24:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 13624,
                              "name": "globalConstraintsRegisterPost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12753,
                              "src": "12833:29:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 13626,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 13625,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13505,
                              "src": "12863:17:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12833:48:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "src": "12806:75:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                          }
                        },
                        "id": 13628,
                        "nodeType": "ExpressionStatement",
                        "src": "12806:75:52"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13629,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13518,
                            "src": "12899:24:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "id": 13630,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12724,
                          "src": "12899:37:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 13680,
                        "nodeType": "IfStatement",
                        "src": "12895:621:52",
                        "trueBody": {
                          "id": 13679,
                          "nodeType": "Block",
                          "src": "12938:578:52",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 13637,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13631,
                                    "name": "globalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13518,
                                    "src": "12960:24:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                      "typeString": "struct Controller.GlobalConstraintRegister memory"
                                    }
                                  },
                                  "id": 13632,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "index",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12726,
                                  "src": "12960:30:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 13636,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13633,
                                      "name": "globalConstraintsPost",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12745,
                                      "src": "12993:21:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 13634,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "12993:28:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 13635,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "13022:1:52",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "12993:30:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "12960:63:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 13664,
                              "nodeType": "IfStatement",
                              "src": "12956:394:52",
                              "trueBody": {
                                "id": 13663,
                                "nodeType": "Block",
                                "src": "13025:325:52",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13645,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 13638,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13521,
                                        "src": "13047:16:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 13639,
                                          "name": "globalConstraintsPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12745,
                                          "src": "13066:21:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 13644,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 13643,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 13640,
                                              "name": "globalConstraintsPost",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 12745,
                                              "src": "13088:21:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 13641,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "13088:28:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 13642,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "13117:1:52",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "13088:30:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "13066:53:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "src": "13047:72:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                        "typeString": "struct Controller.GlobalConstraint memory"
                                      }
                                    },
                                    "id": 13646,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13047:72:52"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13652,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 13647,
                                          "name": "globalConstraintsPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12745,
                                          "src": "13141:21:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 13650,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 13648,
                                            "name": "globalConstraintRegister",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 13518,
                                            "src": "13163:24:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                                            }
                                          },
                                          "id": 13649,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "index",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 12726,
                                          "src": "13163:30:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "13141:53:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 13651,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13521,
                                        "src": "13197:16:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "src": "13141:72:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref"
                                      }
                                    },
                                    "id": 13653,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13141:72:52"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13661,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 13654,
                                            "name": "globalConstraintsRegisterPost",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12753,
                                            "src": "13235:29:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                            }
                                          },
                                          "id": 13657,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 13655,
                                              "name": "globalConstraint",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 13521,
                                              "src": "13265:16:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                                "typeString": "struct Controller.GlobalConstraint memory"
                                              }
                                            },
                                            "id": 13656,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "gcAddress",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12719,
                                            "src": "13265:26:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "13235:57:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                            "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                          }
                                        },
                                        "id": 13658,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 12726,
                                        "src": "13235:63:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 13659,
                                          "name": "globalConstraintRegister",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13518,
                                          "src": "13301:24:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                                          }
                                        },
                                        "id": 13660,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 12726,
                                        "src": "13301:30:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "13235:96:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 13662,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13235:96:52"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13668,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "--",
                                "prefix": false,
                                "src": "13367:30:52",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13665,
                                    "name": "globalConstraintsPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12745,
                                    "src": "13367:21:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 13667,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "13367:28:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 13669,
                              "nodeType": "ExpressionStatement",
                              "src": "13367:30:52"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13673,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "13415:55:52",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 13670,
                                    "name": "globalConstraintsRegisterPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12753,
                                    "src": "13422:29:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 13672,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 13671,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13505,
                                    "src": "13452:17:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "13422:48:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 13674,
                              "nodeType": "ExpressionStatement",
                              "src": "13415:55:52"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13677,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 13675,
                                  "name": "retVal",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13534,
                                  "src": "13488:6:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 13676,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "13497:4:52",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "13488:13:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 13678,
                              "nodeType": "ExpressionStatement",
                              "src": "13488:13:52"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 13683,
                    "name": "retVal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13534,
                    "src": "13539:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13696,
                  "nodeType": "IfStatement",
                  "src": "13535:214:52",
                  "trueBody": {
                    "id": 13695,
                    "nodeType": "Block",
                    "src": "13547:202:52",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 13685,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13505,
                              "src": "13602:17:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13686,
                                "name": "globalConstraintRegister",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13518,
                                "src": "13633:24:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                  "typeString": "struct Controller.GlobalConstraintRegister memory"
                                }
                              },
                              "id": 13687,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "index",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12726,
                              "src": "13633:30:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_CallPhase_$14476",
                                "typeString": "enum GlobalConstraintInterface.CallPhase"
                              },
                              "id": 13692,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 13688,
                                "name": "when",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13526,
                                "src": "13677:4:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_CallPhase_$14476",
                                  "typeString": "enum GlobalConstraintInterface.CallPhase"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13689,
                                    "name": "GlobalConstraintInterface",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14504,
                                    "src": "13685:25:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                      "typeString": "type(contract GlobalConstraintInterface)"
                                    }
                                  },
                                  "id": 13690,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "CallPhase",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 14476,
                                  "src": "13685:35:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                    "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                                  }
                                },
                                "id": 13691,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "Pre",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "13685:39:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_CallPhase_$14476",
                                  "typeString": "enum GlobalConstraintInterface.CallPhase"
                                }
                              },
                              "src": "13677:47:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 13684,
                            "name": "RemoveGlobalConstraint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12811,
                            "src": "13566:22:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                              "typeString": "function (address,uint256,bool)"
                            }
                          },
                          "id": 13693,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13566:172:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13694,
                        "nodeType": "EmitStatement",
                        "src": "13561:177:52"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13697,
                    "name": "retVal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13534,
                    "src": "13765:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13516,
                  "id": 13698,
                  "nodeType": "Return",
                  "src": "13758:13:52"
                }
              ]
            },
            "documentation": "@dev remove Global Constraint\n@param _globalConstraint the address of the global constraint to be remove.\n@return bool which represents a success",
            "id": 13700,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13510,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13509,
                  "name": "onlyGlobalConstraintsScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12914,
                  "src": "11467:27:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11467:27:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13512,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13507,
                    "src": "11513:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13513,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13511,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "11499:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11499:22:52"
              }
            ],
            "name": "removeGlobalConstraint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13508,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13505,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 13700,
                  "src": "11406:25:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13504,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11406:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13507,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13700,
                  "src": "11433:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13506,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11433:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11405:44:52"
            },
            "returnParameters": {
              "id": 13516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13515,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13700,
                  "src": "11534:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13514,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11534:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11533:6:52"
            },
            "scope": 14161,
            "src": "11373:2405:52",
            "stateMutability": "nonpayable",
            "superFunction": 14247,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13805,
              "nodeType": "Block",
              "src": "14170:756:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13721,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13717,
                          "name": "newController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12739,
                          "src": "14188:13:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13719,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14213:1:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 13718,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14205:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 13720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14205:10:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "14188:27:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13716,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "14180:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14180:36:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13723,
                  "nodeType": "ExpressionStatement",
                  "src": "14180:36:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13729,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13725,
                          "name": "_newController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13702,
                          "src": "14289:14:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13727,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14315:1:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 13726,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14307:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 13728,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14307:10:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "14289:28:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13724,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "14281:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14281:37:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13731,
                  "nodeType": "ExpressionStatement",
                  "src": "14281:37:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13732,
                      "name": "newController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12739,
                      "src": "14328:13:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13733,
                      "name": "_newController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13702,
                      "src": "14344:14:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14328:30:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 13735,
                  "nodeType": "ExpressionStatement",
                  "src": "14328:30:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13739,
                        "name": "_newController",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13702,
                        "src": "14393:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13736,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "14368:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 13738,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21393,
                      "src": "14368:24:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 13740,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14368:40:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13741,
                  "nodeType": "ExpressionStatement",
                  "src": "14368:40:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13747,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 13743,
                              "name": "avatar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12733,
                              "src": "14426:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Avatar_$12705",
                                "typeString": "contract Avatar"
                              }
                            },
                            "id": 13744,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21342,
                            "src": "14426:12:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 13745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14426:14:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 13746,
                          "name": "_newController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13702,
                          "src": "14444:14:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "14426:32:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13742,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "14418:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14418:41:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13749,
                  "nodeType": "ExpressionStatement",
                  "src": "14418:41:52"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 13756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 13750,
                          "name": "nativeToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12735,
                          "src": "14473:11:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DAOToken_$14470",
                            "typeString": "contract DAOToken"
                          }
                        },
                        "id": 13751,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21342,
                        "src": "14473:17:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 13752,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14473:19:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13754,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22211,
                          "src": "14504:4:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Controller_$14161",
                            "typeString": "contract Controller"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Controller_$14161",
                            "typeString": "contract Controller"
                          }
                        ],
                        "id": 13753,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14496:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 13755,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14496:13:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14473:36:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13772,
                  "nodeType": "IfStatement",
                  "src": "14469:172:52",
                  "trueBody": {
                    "id": 13771,
                    "nodeType": "Block",
                    "src": "14511:130:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 13760,
                              "name": "_newController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13702,
                              "src": "14555:14:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 13757,
                              "name": "nativeToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12735,
                              "src": "14525:11:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_DAOToken_$14470",
                                "typeString": "contract DAOToken"
                              }
                            },
                            "id": 13759,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferOwnership",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21393,
                            "src": "14525:29:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 13761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14525:45:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13762,
                        "nodeType": "ExpressionStatement",
                        "src": "14525:45:52"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 13768,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13764,
                                    "name": "nativeToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12735,
                                    "src": "14592:11:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_DAOToken_$14470",
                                      "typeString": "contract DAOToken"
                                    }
                                  },
                                  "id": 13765,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "owner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21342,
                                  "src": "14592:17:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                    "typeString": "function () view external returns (address)"
                                  }
                                },
                                "id": 13766,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14592:19:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 13767,
                                "name": "_newController",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13702,
                                "src": "14615:14:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "14592:37:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 13763,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22174,
                            "src": "14584:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 13769,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14584:46:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13770,
                        "nodeType": "ExpressionStatement",
                        "src": "14584:46:52"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 13779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 13773,
                          "name": "nativeReputation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12737,
                          "src": "14654:16:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Reputation_$16423",
                            "typeString": "contract Reputation"
                          }
                        },
                        "id": 13774,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21342,
                        "src": "14654:22:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 13775,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14654:24:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13777,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22211,
                          "src": "14690:4:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Controller_$14161",
                            "typeString": "contract Controller"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Controller_$14161",
                            "typeString": "contract Controller"
                          }
                        ],
                        "id": 13776,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14682:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 13778,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14682:13:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14654:41:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13795,
                  "nodeType": "IfStatement",
                  "src": "14650:187:52",
                  "trueBody": {
                    "id": 13794,
                    "nodeType": "Block",
                    "src": "14697:140:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 13783,
                              "name": "_newController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13702,
                              "src": "14746:14:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 13780,
                              "name": "nativeReputation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12737,
                              "src": "14711:16:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Reputation_$16423",
                                "typeString": "contract Reputation"
                              }
                            },
                            "id": 13782,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferOwnership",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21393,
                            "src": "14711:34:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 13784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14711:50:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13785,
                        "nodeType": "ExpressionStatement",
                        "src": "14711:50:52"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 13791,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13787,
                                    "name": "nativeReputation",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12737,
                                    "src": "14783:16:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Reputation_$16423",
                                      "typeString": "contract Reputation"
                                    }
                                  },
                                  "id": 13788,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "owner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21342,
                                  "src": "14783:22:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                    "typeString": "function () view external returns (address)"
                                  }
                                },
                                "id": 13789,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14783:24:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 13790,
                                "name": "_newController",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13702,
                                "src": "14811:14:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "14783:42:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 13786,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22174,
                            "src": "14775:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 13792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14775:51:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13793,
                        "nodeType": "ExpressionStatement",
                        "src": "14775:51:52"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13798,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22211,
                            "src": "14877:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Controller_$14161",
                              "typeString": "contract Controller"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Controller_$14161",
                              "typeString": "contract Controller"
                            }
                          ],
                          "id": 13797,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14869:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 13799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14869:13:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13800,
                        "name": "newController",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12739,
                        "src": "14884:13:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13796,
                      "name": "UpgradeController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12795,
                      "src": "14851:17:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 13801,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14851:47:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13802,
                  "nodeType": "EmitStatement",
                  "src": "14846:52:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 13803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "14915:4:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 13715,
                  "id": 13804,
                  "nodeType": "Return",
                  "src": "14908:11:52"
                }
              ]
            },
            "documentation": "@dev upgrade the Controller\n     The function will trigger an event 'UpgradeController'.\n@param  _newController the address of the new controller.\n@return bool which represents a success",
            "id": 13806,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13707,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13706,
                  "name": "onlyUpgradingScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12934,
                  "src": "14092:19:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14092:19:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13710,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13704,
                        "src": "14138:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 13709,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "14130:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13711,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14130:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 13712,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13708,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "14116:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14116:31:52"
              }
            ],
            "name": "upgradeController",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13705,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13702,
                  "name": "_newController",
                  "nodeType": "VariableDeclaration",
                  "scope": 13806,
                  "src": "14035:22:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13701,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14035:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13704,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13806,
                  "src": "14059:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13703,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "14059:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14034:40:52"
            },
            "returnParameters": {
              "id": 13715,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13714,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13806,
                  "src": "14160:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13713,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14160:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14159:6:52"
            },
            "scope": 14161,
            "src": "14008:918:52",
            "stateMutability": "nonpayable",
            "superFunction": 14256,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13838,
              "nodeType": "Block",
              "src": "15606:68:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13833,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13808,
                        "src": "15642:9:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13834,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13810,
                        "src": "15653:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13835,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13814,
                        "src": "15660:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13831,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "15623:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 13832,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "genericCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12563,
                      "src": "15623:18:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (address,bytes memory,uint256) external returns (bool,bytes memory)"
                      }
                    },
                    "id": 13836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15623:44:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "functionReturnParameters": 13830,
                  "id": 13837,
                  "nodeType": "Return",
                  "src": "15616:51:52"
                }
              ]
            },
            "documentation": "@dev perform a generic call to an arbitrary contract\n@param _contract  the contract's address to call\n@param _data ABI-encoded contract call to call `_contract` address.\n@param _avatar the controller's avatar address\n@param _value value (ETH) to transfer with the transaction\n@return bool -success\n        bytes  - the return value of the called _contract's function.",
            "id": 13839,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13817,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13816,
                  "name": "onlyGenericCallScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12954,
                  "src": "15468:21:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15468:21:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "67656e6572696343616c6c",
                    "id": 13819,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "15518:13:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_f50c9c0d8078680ea2ffd7664f6b8e067777195c71561a9aa7bb8b53f908fb39",
                      "typeString": "literal_string \"genericCall\""
                    },
                    "value": "genericCall"
                  }
                ],
                "id": 13820,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13818,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "15494:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15494:38:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13823,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13812,
                        "src": "15559:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 13822,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "15551:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13824,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15551:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 13825,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13821,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "15537:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15537:31:52"
              }
            ],
            "name": "genericCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13815,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13808,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 13839,
                  "src": "15378:17:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13807,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15378:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13810,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 13839,
                  "src": "15397:20:52",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13809,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15397:5:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13812,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13839,
                  "src": "15419:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13811,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "15419:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13814,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 13839,
                  "src": "15435:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13813,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15435:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15377:73:52"
            },
            "returnParameters": {
              "id": 13830,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13827,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13839,
                  "src": "15582:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13826,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15582:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13829,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13839,
                  "src": "15588:12:52",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13828,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15588:5:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15581:20:52"
            },
            "scope": 14161,
            "src": "15357:317:52",
            "stateMutability": "nonpayable",
            "superFunction": 14271,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13866,
              "nodeType": "Block",
              "src": "16083:59:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13862,
                        "name": "_amountInWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13841,
                        "src": "16117:12:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13863,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13843,
                        "src": "16131:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13860,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "16100:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 13861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sendEther",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12588,
                      "src": "16100:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_payable_$returns$_t_bool_$",
                        "typeString": "function (uint256,address payable) external returns (bool)"
                      }
                    },
                    "id": 13864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16100:35:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13859,
                  "id": 13865,
                  "nodeType": "Return",
                  "src": "16093:42:52"
                }
              ]
            },
            "documentation": "@dev send some ether\n@param _amountInWei the amount of ether (in Wei) to send\n@param _to address of the beneficiary\n@return bool which represents a success",
            "id": 13867,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13848,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13847,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12874,
                  "src": "15963:20:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15963:20:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "73656e644574686572",
                    "id": 13850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "16012:11:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_c700fcf825bb96908bcfa40b8d91237381cd207a842fc67195330064c6f87772",
                      "typeString": "literal_string \"sendEther\""
                    },
                    "value": "sendEther"
                  }
                ],
                "id": 13851,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13849,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "15988:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15988:36:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13854,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13845,
                        "src": "16051:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 13853,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "16043:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16043:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 13856,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13852,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "16029:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16029:31:52"
              }
            ],
            "name": "sendEther",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13846,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13841,
                  "name": "_amountInWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 13867,
                  "src": "15887:20:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13840,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15887:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13843,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 13867,
                  "src": "15909:19:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 13842,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15909:15:52",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13845,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13867,
                  "src": "15930:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13844,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "15930:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15886:59:52"
            },
            "returnParameters": {
              "id": 13859,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13858,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13867,
                  "src": "16073:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13857,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16073:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16072:6:52"
            },
            "scope": 14161,
            "src": "15868:274:52",
            "stateMutability": "nonpayable",
            "superFunction": 14282,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13897,
              "nodeType": "Block",
              "src": "16674:81:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13892,
                        "name": "_externalToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13869,
                        "src": "16720:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$22137",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13893,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13871,
                        "src": "16736:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13894,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13873,
                        "src": "16741:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$22137",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13890,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "16691:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 13891,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "externalTokenTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12620,
                      "src": "16691:28:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$22137_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (contract IERC20,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 13895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16691:57:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13889,
                  "id": 13896,
                  "nodeType": "Return",
                  "src": "16684:64:52"
                }
              ]
            },
            "documentation": "@dev send some amount of arbitrary ERC20 Tokens\n@param _externalToken the address of the Token Contract\n@param _to address of the beneficiary\n@param _value the amount of ether (in Wei) to send\n@return bool which represents a success",
            "id": 13898,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13878,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13877,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12874,
                  "src": "16542:20:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16542:20:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "65787465726e616c546f6b656e5472616e73666572",
                    "id": 13880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "16591:23:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_7813035546e060c03dbe66bdee1941f9a0ad6551df13f617f14419ad20f4154f",
                      "typeString": "literal_string \"externalTokenTransfer\""
                    },
                    "value": "externalTokenTransfer"
                  }
                ],
                "id": 13881,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13879,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "16567:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16567:48:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13884,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13875,
                        "src": "16642:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 13883,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "16634:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13885,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16634:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 13886,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13882,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "16620:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16620:31:52"
              }
            ],
            "name": "externalTokenTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13869,
                  "name": "_externalToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 13898,
                  "src": "16457:21:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$22137",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13868,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22137,
                    "src": "16457:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$22137",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13871,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 13898,
                  "src": "16480:11:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13870,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16480:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13873,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 13898,
                  "src": "16493:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13872,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16493:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13875,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13898,
                  "src": "16509:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13874,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "16509:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16456:68:52"
            },
            "returnParameters": {
              "id": 13889,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13888,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13898,
                  "src": "16664:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13887,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16664:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16663:6:52"
            },
            "scope": 14161,
            "src": "16426:329:52",
            "stateMutability": "nonpayable",
            "superFunction": 14295,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13931,
              "nodeType": "Block",
              "src": "17537:92:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13925,
                        "name": "_externalToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13900,
                        "src": "17587:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$22137",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13926,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13902,
                        "src": "17603:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13927,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13904,
                        "src": "17610:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13928,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13906,
                        "src": "17615:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$22137",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13923,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "17554:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 13924,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "externalTokenTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12656,
                      "src": "17554:32:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$22137_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (contract IERC20,address,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 13929,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17554:68:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13922,
                  "id": 13930,
                  "nodeType": "Return",
                  "src": "17547:75:52"
                }
              ]
            },
            "documentation": "@dev transfer token \"from\" address \"to\" address\n     One must to approve the amount of tokens which can be spend from the\n     \"from\" account.This can be done using externalTokenApprove.\n@param _externalToken the address of the Token Contract\n@param _from address of the account to send from\n@param _to address of the beneficiary\n@param _value the amount of ether (in Wei) to send\n@return bool which represents a success",
            "id": 13932,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13911,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13910,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12874,
                  "src": "17401:20:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17401:20:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "65787465726e616c546f6b656e5472616e7366657246726f6d",
                    "id": 13913,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17450:27:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_ac07667e4f3fe9c6116bdfeed71f93079924e4156b3ee8a0c3180f10145562f3",
                      "typeString": "literal_string \"externalTokenTransferFrom\""
                    },
                    "value": "externalTokenTransferFrom"
                  }
                ],
                "id": 13914,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13912,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "17426:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17426:52:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13917,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13908,
                        "src": "17505:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 13916,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "17497:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17497:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 13919,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13915,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "17483:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17483:31:52"
              }
            ],
            "name": "externalTokenTransferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13909,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13900,
                  "name": "_externalToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 13932,
                  "src": "17285:21:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$22137",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13899,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22137,
                    "src": "17285:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$22137",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13902,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 13932,
                  "src": "17312:13:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13901,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17312:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13904,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 13932,
                  "src": "17331:11:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13903,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17331:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13906,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 13932,
                  "src": "17348:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13905,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17348:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13908,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13932,
                  "src": "17368:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13907,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "17368:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17279:104:52"
            },
            "returnParameters": {
              "id": 13922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13921,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13932,
                  "src": "17527:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13920,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17527:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17526:6:52"
            },
            "scope": 14161,
            "src": "17245:384:52",
            "stateMutability": "nonpayable",
            "superFunction": 14310,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13962,
              "nodeType": "Block",
              "src": "18269:86:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13957,
                        "name": "_externalToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13934,
                        "src": "18315:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$22137",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13958,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13936,
                        "src": "18331:8:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13959,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13938,
                        "src": "18341:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$22137",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13955,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "18286:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 13956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "externalTokenApproval",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12688,
                      "src": "18286:28:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$22137_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (contract IERC20,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 13960,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18286:62:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13954,
                  "id": 13961,
                  "nodeType": "Return",
                  "src": "18279:69:52"
                }
              ]
            },
            "documentation": "@dev externalTokenApproval approve the spender address to spend a specified amount of tokens\n     on behalf of msg.sender.\n@param _externalToken the address of the Token Contract\n@param _spender address\n@param _value the amount of ether (in Wei) which the approval is referring to.\n@return bool which represents a success",
            "id": 13963,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13943,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13942,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12874,
                  "src": "18129:20:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18129:20:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "65787465726e616c546f6b656e496e637265617365417070726f76616c",
                    "id": 13945,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "18178:31:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a6b5493ce06b69199b7c164b2fe8141dd5ecf7d2d491b28efc85f9c00fdfd15c",
                      "typeString": "literal_string \"externalTokenIncreaseApproval\""
                    },
                    "value": "externalTokenIncreaseApproval"
                  }
                ],
                "id": 13946,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13944,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "18154:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18154:56:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13949,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13940,
                        "src": "18237:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 13948,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "18229:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18229:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 13951,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13947,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "18215:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18215:31:52"
              }
            ],
            "name": "externalTokenApproval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13941,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13934,
                  "name": "_externalToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 13963,
                  "src": "18039:21:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$22137",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13933,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22137,
                    "src": "18039:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$22137",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13936,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 13963,
                  "src": "18062:16:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13935,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18062:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13938,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 13963,
                  "src": "18080:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13937,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18080:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13940,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13963,
                  "src": "18096:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13939,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "18096:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18038:73:52"
            },
            "returnParameters": {
              "id": 13954,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13953,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13963,
                  "src": "18259:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13952,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18259:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18258:6:52"
            },
            "scope": 14161,
            "src": "18008:347:52",
            "stateMutability": "nonpayable",
            "superFunction": 14323,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13984,
              "nodeType": "Block",
              "src": "18787:50:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13981,
                        "name": "_metaData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13965,
                        "src": "18820:9:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13979,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "18804:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 13980,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "metaData",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12704,
                      "src": "18804:15:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (string memory) external returns (bool)"
                      }
                    },
                    "id": 13982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18804:26:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13978,
                  "id": 13983,
                  "nodeType": "Return",
                  "src": "18797:33:52"
                }
              ]
            },
            "documentation": "@dev metaData emits an event with a string, should contain the hash of some meta data.\n@param _metaData a string representing a hash of the meta data\n@param _avatar Avatar\n@return bool which represents a success",
            "id": 13985,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13970,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13969,
                  "name": "onlyMetaDataScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12974,
                  "src": "18698:18:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18698:18:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13973,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13967,
                        "src": "18747:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 13972,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "18739:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18739:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 13975,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13971,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "18725:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18725:31:52"
              }
            ],
            "name": "metaData",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13968,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13965,
                  "name": "_metaData",
                  "nodeType": "VariableDeclaration",
                  "scope": 13985,
                  "src": "18630:25:52",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 13964,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "18630:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13967,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13985,
                  "src": "18657:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13966,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "18657:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18629:43:52"
            },
            "returnParameters": {
              "id": 13978,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13977,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13985,
                  "src": "18773:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13976,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18773:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18772:6:52"
            },
            "scope": 14161,
            "src": "18612:225:52",
            "stateMutability": "nonpayable",
            "superFunction": 14332,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13999,
              "nodeType": "Block",
              "src": "19084:49:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13996,
                        "name": "nativeReputation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12737,
                        "src": "19109:16:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Reputation_$16423",
                          "typeString": "contract Reputation"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Reputation_$16423",
                          "typeString": "contract Reputation"
                        }
                      ],
                      "id": 13995,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "19101:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13997,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19101:25:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 13994,
                  "id": 13998,
                  "nodeType": "Return",
                  "src": "19094:32:52"
                }
              ]
            },
            "documentation": "@dev getNativeReputation\n@param _avatar the organization avatar.\n@return organization native reputation",
            "id": 14000,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13990,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13987,
                    "src": "19053:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13991,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13989,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "19039:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19039:22:52"
              }
            ],
            "name": "getNativeReputation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13988,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13987,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 14000,
                  "src": "19013:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13986,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19013:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19012:17:52"
            },
            "returnParameters": {
              "id": 13994,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13993,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14000,
                  "src": "19075:7:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13992,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19075:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19074:9:52"
            },
            "scope": 14161,
            "src": "18984:149:52",
            "stateMutability": "view",
            "superFunction": 14339,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14016,
              "nodeType": "Block",
              "src": "19252:52:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14013,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14002,
                        "src": "19289:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14012,
                      "name": "_isSchemeRegistered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14160,
                      "src": "19269:19:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 14014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19269:28:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 14011,
                  "id": 14015,
                  "nodeType": "Return",
                  "src": "19262:35:52"
                }
              ]
            },
            "documentation": null,
            "id": 14017,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 14007,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14004,
                    "src": "19224:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 14008,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 14006,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "19210:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19210:22:52"
              }
            ],
            "name": "isSchemeRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14002,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 14017,
                  "src": "19167:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14001,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19167:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14004,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 14017,
                  "src": "19184:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14003,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19184:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19166:34:52"
            },
            "returnParameters": {
              "id": 14011,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14010,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14017,
                  "src": "19246:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14009,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19246:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19245:6:52"
            },
            "scope": 14161,
            "src": "19139:165:52",
            "stateMutability": "view",
            "superFunction": 14348,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14034,
              "nodeType": "Block",
              "src": "19447:51:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14029,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12731,
                        "src": "19464:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 14031,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 14030,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14019,
                        "src": "19472:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "19464:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "id": 14032,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "paramsHash",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12714,
                    "src": "19464:27:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 14028,
                  "id": 14033,
                  "nodeType": "Return",
                  "src": "19457:34:52"
                }
              ]
            },
            "documentation": null,
            "id": 14035,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 14024,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14021,
                    "src": "19404:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 14025,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 14023,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "19390:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19390:22:52"
              }
            ],
            "name": "getSchemeParameters",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14022,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14019,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 14035,
                  "src": "19339:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14018,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19339:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14021,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 14035,
                  "src": "19356:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14020,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19356:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19338:34:52"
            },
            "returnParameters": {
              "id": 14028,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14027,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14035,
                  "src": "19434:7:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14026,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19434:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19433:9:52"
            },
            "scope": 14161,
            "src": "19310:188:52",
            "stateMutability": "view",
            "superFunction": 14357,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14052,
              "nodeType": "Block",
              "src": "19641:52:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14047,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12731,
                        "src": "19658:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 14049,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 14048,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14037,
                        "src": "19666:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "19658:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "id": 14050,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "permissions",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12716,
                    "src": "19658:28:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 14046,
                  "id": 14051,
                  "nodeType": "Return",
                  "src": "19651:35:52"
                }
              ]
            },
            "documentation": null,
            "id": 14053,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 14042,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14039,
                    "src": "19599:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 14043,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 14041,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "19585:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19585:22:52"
              }
            ],
            "name": "getSchemePermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14040,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14037,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 14053,
                  "src": "19534:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14036,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19534:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14039,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 14053,
                  "src": "19551:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14038,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19551:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19533:34:52"
            },
            "returnParameters": {
              "id": 14046,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14045,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14053,
                  "src": "19629:6:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 14044,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "19629:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19628:8:52"
            },
            "scope": 14161,
            "src": "19504:189:52",
            "stateMutability": "view",
            "superFunction": 14375,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14094,
              "nodeType": "Block",
              "src": "19805:403:52",
              "statements": [
                {
                  "assignments": [
                    14063
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14063,
                      "name": "register",
                      "nodeType": "VariableDeclaration",
                      "scope": 14094,
                      "src": "19816:40:52",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 14062,
                        "name": "GlobalConstraintRegister",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 12727,
                        "src": "19816:24:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage_ptr",
                          "typeString": "struct Controller.GlobalConstraintRegister"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14067,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 14064,
                      "name": "globalConstraintsRegisterPre",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12749,
                      "src": "19859:28:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                        "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                      }
                    },
                    "id": 14066,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 14065,
                      "name": "_globalConstraint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14055,
                      "src": "19888:17:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19859:47:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                      "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19816:90:52"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 14068,
                      "name": "register",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14063,
                      "src": "19921:8:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister memory"
                      }
                    },
                    "id": 14069,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isRegistered",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12724,
                    "src": "19921:21:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14077,
                  "nodeType": "IfStatement",
                  "src": "19917:102:52",
                  "trueBody": {
                    "id": 14076,
                    "nodeType": "Block",
                    "src": "19944:75:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 14070,
                              "name": "globalConstraintsPre",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12742,
                              "src": "19965:20:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                              }
                            },
                            "id": 14073,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 14071,
                                "name": "register",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14063,
                                "src": "19986:8:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                  "typeString": "struct Controller.GlobalConstraintRegister memory"
                                }
                              },
                              "id": 14072,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "index",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12726,
                              "src": "19986:14:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "19965:36:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                              "typeString": "struct Controller.GlobalConstraint storage ref"
                            }
                          },
                          "id": 14074,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "params",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12721,
                          "src": "19965:43:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 14061,
                        "id": 14075,
                        "nodeType": "Return",
                        "src": "19958:50:52"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14078,
                      "name": "register",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14063,
                      "src": "20029:8:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14079,
                        "name": "globalConstraintsRegisterPost",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12753,
                        "src": "20040:29:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                          "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                        }
                      },
                      "id": 14081,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 14080,
                        "name": "_globalConstraint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14055,
                        "src": "20070:17:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "20040:48:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                        "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                      }
                    },
                    "src": "20029:59:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                      "typeString": "struct Controller.GlobalConstraintRegister memory"
                    }
                  },
                  "id": 14083,
                  "nodeType": "ExpressionStatement",
                  "src": "20029:59:52"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 14084,
                      "name": "register",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14063,
                      "src": "20103:8:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister memory"
                      }
                    },
                    "id": 14085,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isRegistered",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12724,
                    "src": "20103:21:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14093,
                  "nodeType": "IfStatement",
                  "src": "20099:103:52",
                  "trueBody": {
                    "id": 14092,
                    "nodeType": "Block",
                    "src": "20126:76:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 14086,
                              "name": "globalConstraintsPost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12745,
                              "src": "20147:21:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                              }
                            },
                            "id": 14089,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 14087,
                                "name": "register",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14063,
                                "src": "20169:8:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                  "typeString": "struct Controller.GlobalConstraintRegister memory"
                                }
                              },
                              "id": 14088,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "index",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12726,
                              "src": "20169:14:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20147:37:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                              "typeString": "struct Controller.GlobalConstraint storage ref"
                            }
                          },
                          "id": 14090,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "params",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12721,
                          "src": "20147:44:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 14061,
                        "id": 14091,
                        "nodeType": "Return",
                        "src": "20140:51:52"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 14095,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getGlobalConstraintParameters",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14058,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14055,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 14095,
                  "src": "19738:25:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14054,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19738:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14057,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14095,
                  "src": "19765:7:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14056,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19765:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19737:36:52"
            },
            "returnParameters": {
              "id": 14061,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14060,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14095,
                  "src": "19796:7:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14059,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19796:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19795:9:52"
            },
            "scope": 14161,
            "src": "19699:509:52",
            "stateMutability": "view",
            "superFunction": 14366,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14113,
              "nodeType": "Block",
              "src": "20557:83:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 14107,
                          "name": "globalConstraintsPre",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12742,
                          "src": "20575:20:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                          }
                        },
                        "id": 14108,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20575:27:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 14109,
                          "name": "globalConstraintsPost",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12745,
                          "src": "20604:21:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                          }
                        },
                        "id": 14110,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20604:28:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 14111,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "20574:59:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 14106,
                  "id": 14112,
                  "nodeType": "Return",
                  "src": "20567:66:52"
                }
              ]
            },
            "documentation": "@dev globalConstraintsCount return the global constraint pre and post count\n@return uint256 globalConstraintsPre count.\n@return uint256 globalConstraintsPost count.",
            "id": 14114,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 14100,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14097,
                    "src": "20499:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 14101,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 14099,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "20485:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20485:22:52"
              }
            ],
            "name": "globalConstraintsCount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14098,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14097,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 14114,
                  "src": "20443:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14096,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20443:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20442:17:52"
            },
            "returnParameters": {
              "id": 14106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14103,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14114,
                  "src": "20537:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14102,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "20537:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14105,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14114,
                  "src": "20543:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14104,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "20543:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20536:12:52"
            },
            "scope": 14161,
            "src": "20411:229:52",
            "stateMutability": "view",
            "superFunction": 14384,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14137,
              "nodeType": "Block",
              "src": "20819:167:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 14134,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 14126,
                              "name": "globalConstraintsRegisterPre",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12749,
                              "src": "20837:28:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 14128,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 14127,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14116,
                              "src": "20866:17:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20837:47:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "id": 14129,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12724,
                          "src": "20837:60:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 14130,
                              "name": "globalConstraintsRegisterPost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12753,
                              "src": "20917:29:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 14132,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 14131,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14116,
                              "src": "20947:17:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20917:48:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "id": 14133,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12724,
                          "src": "20917:61:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "20837:141:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 14135,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "20836:143:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 14125,
                  "id": 14136,
                  "nodeType": "Return",
                  "src": "20829:150:52"
                }
              ]
            },
            "documentation": null,
            "id": 14138,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 14121,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14118,
                    "src": "20767:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 14122,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 14120,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "20753:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20753:22:52"
              }
            ],
            "name": "isGlobalConstraintRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14119,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14116,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 14138,
                  "src": "20684:25:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14115,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20684:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14118,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 14138,
                  "src": "20711:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14117,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20711:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20683:44:52"
            },
            "returnParameters": {
              "id": 14125,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14124,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14138,
                  "src": "20805:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14123,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "20805:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20804:6:52"
            },
            "scope": 14161,
            "src": "20646:340:52",
            "stateMutability": "view",
            "superFunction": 14393,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14159,
              "nodeType": "Block",
              "src": "21065:86:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 14156,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 14152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 14145,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12731,
                                "src": "21083:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 14147,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 14146,
                                "name": "_scheme",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14140,
                                "src": "21091:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "21083:16:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 14148,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12716,
                            "src": "21083:28:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303031",
                                "id": 14150,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "21119:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "0x00000001"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "id": 14149,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21112:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 14151,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21112:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "21083:47:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 14154,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "21141:1:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 14153,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "21134:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 14155,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21134:9:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "21083:60:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 14157,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "21082:62:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 14144,
                  "id": 14158,
                  "nodeType": "Return",
                  "src": "21075:69:52"
                }
              ]
            },
            "documentation": null,
            "id": 14160,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isSchemeRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14141,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14140,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 14160,
                  "src": "21021:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14139,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21021:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21020:17:52"
            },
            "returnParameters": {
              "id": 14144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14143,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14160,
                  "src": "21059:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14142,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21059:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21058:6:52"
            },
            "scope": 14161,
            "src": "20992:159:52",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 14162,
        "src": "410:20743:52"
      }
    ],
    "src": "0:21154:52"
  },
  "legacyAST": {
    "absolutePath": "@daostack/arc/contracts/controller/Controller.sol",
    "exportedSymbols": {
      "Controller": [
        14161
      ]
    },
    "id": 14162,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 12707,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:52"
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "./Avatar.sol",
        "id": 12708,
        "nodeType": "ImportDirective",
        "scope": 14162,
        "sourceUnit": 12706,
        "src": "25:22:52",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol",
        "file": "../globalConstraints/GlobalConstraintInterface.sol",
        "id": 12709,
        "nodeType": "ImportDirective",
        "scope": 14162,
        "sourceUnit": 14505,
        "src": "48:60:52",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/ControllerInterface.sol",
        "file": "./ControllerInterface.sol",
        "id": 12710,
        "nodeType": "ImportDirective",
        "scope": 14162,
        "sourceUnit": 14395,
        "src": "109:35:52",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12711,
              "name": "ControllerInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14394,
              "src": "433:19:52",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ControllerInterface_$14394",
                "typeString": "contract ControllerInterface"
              }
            },
            "id": 12712,
            "nodeType": "InheritanceSpecifier",
            "src": "433:19:52"
          }
        ],
        "contractDependencies": [
          14394
        ],
        "contractKind": "contract",
        "documentation": "@title Controller contract\n@dev A controller controls the organizations tokens, reputation and avatar.\nIt is subject to a set of schemes and constraints that determine its behavior.\nEach scheme has it own parameters and operation permissions.",
        "fullyImplemented": true,
        "id": 14161,
        "linearizedBaseContracts": [
          14161,
          14394
        ],
        "name": "Controller",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "Controller.Scheme",
            "id": 12717,
            "members": [
              {
                "constant": false,
                "id": 12714,
                "name": "paramsHash",
                "nodeType": "VariableDeclaration",
                "scope": 12717,
                "src": "484:18:52",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 12713,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "484:7:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12716,
                "name": "permissions",
                "nodeType": "VariableDeclaration",
                "scope": 12717,
                "src": "553:19:52",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes4",
                  "typeString": "bytes4"
                },
                "typeName": {
                  "id": 12715,
                  "name": "bytes4",
                  "nodeType": "ElementaryTypeName",
                  "src": "553:6:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Scheme",
            "nodeType": "StructDefinition",
            "scope": 14161,
            "src": "460:663:52",
            "visibility": "public"
          },
          {
            "canonicalName": "Controller.GlobalConstraint",
            "id": 12722,
            "members": [
              {
                "constant": false,
                "id": 12719,
                "name": "gcAddress",
                "nodeType": "VariableDeclaration",
                "scope": 12722,
                "src": "1163:17:52",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 12718,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1163:7:52",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12721,
                "name": "params",
                "nodeType": "VariableDeclaration",
                "scope": 12722,
                "src": "1190:14:52",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 12720,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1190:7:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "GlobalConstraint",
            "nodeType": "StructDefinition",
            "scope": 14161,
            "src": "1129:82:52",
            "visibility": "public"
          },
          {
            "canonicalName": "Controller.GlobalConstraintRegister",
            "id": 12727,
            "members": [
              {
                "constant": false,
                "id": 12724,
                "name": "isRegistered",
                "nodeType": "VariableDeclaration",
                "scope": 12727,
                "src": "1259:17:52",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 12723,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1259:4:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12726,
                "name": "index",
                "nodeType": "VariableDeclaration",
                "scope": 12727,
                "src": "1302:13:52",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 12725,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1302:7:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "GlobalConstraintRegister",
            "nodeType": "StructDefinition",
            "scope": 14161,
            "src": "1217:137:52",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12731,
            "name": "schemes",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "1360:39:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
              "typeString": "mapping(address => struct Controller.Scheme)"
            },
            "typeName": {
              "id": 12730,
              "keyType": {
                "id": 12728,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1368:7:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1360:24:52",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                "typeString": "mapping(address => struct Controller.Scheme)"
              },
              "valueType": {
                "contractScope": null,
                "id": 12729,
                "name": "Scheme",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 12717,
                "src": "1377:6:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Scheme_$12717_storage_ptr",
                  "typeString": "struct Controller.Scheme"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12733,
            "name": "avatar",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "1406:20:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Avatar_$12705",
              "typeString": "contract Avatar"
            },
            "typeName": {
              "contractScope": null,
              "id": 12732,
              "name": "Avatar",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12705,
              "src": "1406:6:52",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Avatar_$12705",
                "typeString": "contract Avatar"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12735,
            "name": "nativeToken",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "1432:27:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DAOToken_$14470",
              "typeString": "contract DAOToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 12734,
              "name": "DAOToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14470,
              "src": "1432:8:52",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DAOToken_$14470",
                "typeString": "contract DAOToken"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12737,
            "name": "nativeReputation",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "1465:34:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Reputation_$16423",
              "typeString": "contract Reputation"
            },
            "typeName": {
              "contractScope": null,
              "id": 12736,
              "name": "Reputation",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16423,
              "src": "1465:10:52",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Reputation_$16423",
                "typeString": "contract Reputation"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12739,
            "name": "newController",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "1598:28:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 12738,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1598:7:52",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12742,
            "name": "globalConstraintsPre",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "1723:46:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
              "typeString": "struct Controller.GlobalConstraint[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 12740,
                "name": "GlobalConstraint",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 12722,
                "src": "1723:16:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraint"
                }
              },
              "id": 12741,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1723:18:52",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage_ptr",
                "typeString": "struct Controller.GlobalConstraint[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12745,
            "name": "globalConstraintsPost",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "1867:47:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
              "typeString": "struct Controller.GlobalConstraint[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 12743,
                "name": "GlobalConstraint",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 12722,
                "src": "1867:16:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraint"
                }
              },
              "id": 12744,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1867:18:52",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage_ptr",
                "typeString": "struct Controller.GlobalConstraint[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12749,
            "name": "globalConstraintsRegisterPre",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "2027:78:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
            },
            "typeName": {
              "id": 12748,
              "keyType": {
                "id": 12746,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2035:7:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2027:42:52",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
              },
              "valueType": {
                "contractScope": null,
                "id": 12747,
                "name": "GlobalConstraintRegister",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 12727,
                "src": "2044:24:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraintRegister"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12753,
            "name": "globalConstraintsRegisterPost",
            "nodeType": "VariableDeclaration",
            "scope": 14161,
            "src": "2220:79:52",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
            },
            "typeName": {
              "id": 12752,
              "keyType": {
                "id": 12750,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2228:7:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2220:42:52",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister)"
              },
              "valueType": {
                "contractScope": null,
                "id": 12751,
                "name": "GlobalConstraintRegister",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 12727,
                "src": "2237:24:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage_ptr",
                  "typeString": "struct Controller.GlobalConstraintRegister"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12761,
            "name": "MintReputation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12760,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12755,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 12761,
                  "src": "2328:23:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12754,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2328:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12757,
                  "indexed": true,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 12761,
                  "src": "2353:19:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12756,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2353:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12759,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 12761,
                  "src": "2374:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12758,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2374:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2327:63:52"
            },
            "src": "2306:85:52"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12769,
            "name": "BurnReputation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12763,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 12769,
                  "src": "2418:23:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12762,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2418:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12765,
                  "indexed": true,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 12769,
                  "src": "2443:21:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12764,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2443:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12767,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 12769,
                  "src": "2466:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12766,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2466:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2417:65:52"
            },
            "src": "2396:87:52"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12777,
            "name": "MintTokens",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12776,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12771,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 12777,
                  "src": "2506:23:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12770,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2506:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12773,
                  "indexed": true,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 12777,
                  "src": "2531:28:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12772,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2531:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12775,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 12777,
                  "src": "2561:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12774,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2561:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2505:72:52"
            },
            "src": "2488:90:52"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12783,
            "name": "RegisterScheme",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12779,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 12783,
                  "src": "2605:23:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12778,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2605:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12781,
                  "indexed": true,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 12783,
                  "src": "2630:23:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12780,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2630:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2604:50:52"
            },
            "src": "2583:72:52"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12789,
            "name": "UnregisterScheme",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12785,
                  "indexed": true,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 12789,
                  "src": "2684:23:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12784,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2684:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12787,
                  "indexed": true,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 12789,
                  "src": "2709:23:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12786,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2709:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2683:50:52"
            },
            "src": "2660:74:52"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12795,
            "name": "UpgradeController",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12794,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12791,
                  "indexed": true,
                  "name": "_oldController",
                  "nodeType": "VariableDeclaration",
                  "scope": 12795,
                  "src": "2763:30:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12790,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2763:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12793,
                  "indexed": false,
                  "name": "_newController",
                  "nodeType": "VariableDeclaration",
                  "scope": 12795,
                  "src": "2795:22:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12792,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2795:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2762:56:52"
            },
            "src": "2739:80:52"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12803,
            "name": "AddGlobalConstraint",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12802,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12797,
                  "indexed": true,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 12803,
                  "src": "2860:33:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12796,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2860:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12799,
                  "indexed": false,
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 12803,
                  "src": "2903:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12798,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2903:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12801,
                  "indexed": false,
                  "name": "_when",
                  "nodeType": "VariableDeclaration",
                  "scope": 12803,
                  "src": "2928:41:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_CallPhase_$14476",
                    "typeString": "enum GlobalConstraintInterface.CallPhase"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 12800,
                    "name": "GlobalConstraintInterface.CallPhase",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 14476,
                    "src": "2928:35:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_CallPhase_$14476",
                      "typeString": "enum GlobalConstraintInterface.CallPhase"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2850:120:52"
            },
            "src": "2825:146:52"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 12811,
            "name": "RemoveGlobalConstraint",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12805,
                  "indexed": true,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 12811,
                  "src": "3006:33:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12804,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3006:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12807,
                  "indexed": false,
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 12811,
                  "src": "3041:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12806,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3041:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12809,
                  "indexed": false,
                  "name": "_isPre",
                  "nodeType": "VariableDeclaration",
                  "scope": 12811,
                  "src": "3057:11:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12808,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3057:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3005:64:52"
            },
            "src": "2977:93:52"
          },
          {
            "body": {
              "id": 12846,
              "nodeType": "Block",
              "src": "3112:228:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12818,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 12816,
                      "name": "avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12733,
                      "src": "3122:6:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Avatar_$12705",
                        "typeString": "contract Avatar"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 12817,
                      "name": "_avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12813,
                      "src": "3131:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Avatar_$12705",
                        "typeString": "contract Avatar"
                      }
                    },
                    "src": "3122:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "id": 12819,
                  "nodeType": "ExpressionStatement",
                  "src": "3122:16:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12824,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 12820,
                      "name": "nativeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12735,
                      "src": "3148:11:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DAOToken_$14470",
                        "typeString": "contract DAOToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 12821,
                          "name": "avatar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12733,
                          "src": "3162:6:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Avatar_$12705",
                            "typeString": "contract Avatar"
                          }
                        },
                        "id": 12822,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "nativeToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12441,
                        "src": "3162:18:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                          "typeString": "function () view external returns (contract DAOToken)"
                        }
                      },
                      "id": 12823,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3162:20:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DAOToken_$14470",
                        "typeString": "contract DAOToken"
                      }
                    },
                    "src": "3148:34:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DAOToken_$14470",
                      "typeString": "contract DAOToken"
                    }
                  },
                  "id": 12825,
                  "nodeType": "ExpressionStatement",
                  "src": "3148:34:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 12826,
                      "name": "nativeReputation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12737,
                      "src": "3192:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Reputation_$16423",
                        "typeString": "contract Reputation"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 12827,
                          "name": "avatar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12733,
                          "src": "3211:6:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Avatar_$12705",
                            "typeString": "contract Avatar"
                          }
                        },
                        "id": 12828,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "nativeReputation",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12443,
                        "src": "3211:23:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Reputation_$16423_$",
                          "typeString": "function () view external returns (contract Reputation)"
                        }
                      },
                      "id": 12829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3211:25:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Reputation_$16423",
                        "typeString": "contract Reputation"
                      }
                    },
                    "src": "3192:44:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Reputation_$16423",
                      "typeString": "contract Reputation"
                    }
                  },
                  "id": 12831,
                  "nodeType": "ExpressionStatement",
                  "src": "3192:44:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12832,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12731,
                        "src": "3246:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 12835,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 12833,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "3254:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12834,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3254:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3246:19:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 12838,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3296:1:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 12837,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3288:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 12839,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3288:10:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303146",
                              "id": 12841,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3320:10:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_31_by_1",
                                "typeString": "int_const 31"
                              },
                              "value": "0x0000001F"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_31_by_1",
                                "typeString": "int_const 31"
                              }
                            ],
                            "id": 12840,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3313:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 12842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3313:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        ],
                        "id": 12836,
                        "name": "Scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12717,
                        "src": "3268:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Scheme_$12717_storage_ptr_$",
                          "typeString": "type(struct Controller.Scheme storage pointer)"
                        }
                      },
                      "id": 12843,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "paramsHash",
                        "permissions"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "3268:65:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$12717_memory",
                        "typeString": "struct Controller.Scheme memory"
                      }
                    },
                    "src": "3246:87:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                      "typeString": "struct Controller.Scheme storage ref"
                    }
                  },
                  "id": 12845,
                  "nodeType": "ExpressionStatement",
                  "src": "3246:87:52"
                }
              ]
            },
            "documentation": null,
            "id": 12847,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12813,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 12847,
                  "src": "3089:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 12812,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "3089:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3087:17:52"
            },
            "returnParameters": {
              "id": 12815,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3112:0:52"
            },
            "scope": 14161,
            "src": "3076:264:52",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12853,
              "nodeType": "Block",
              "src": "3449:25:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 12850,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22176,
                        22177
                      ],
                      "referencedDeclaration": 22176,
                      "src": "3459:6:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 12851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3459:8:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12852,
                  "nodeType": "ExpressionStatement",
                  "src": "3459:8:52"
                }
              ]
            },
            "documentation": null,
            "id": 12854,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12848,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3437:2:52"
            },
            "returnParameters": {
              "id": 12849,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3449:0:52"
            },
            "scope": 14161,
            "src": "3429:45:52",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12873,
              "nodeType": "Block",
              "src": "3528:109:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 12869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 12865,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12857,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12731,
                                "src": "3546:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 12860,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12858,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22171,
                                  "src": "3554:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12859,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3554:10:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3546:19:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 12861,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12716,
                            "src": "3546:31:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303031",
                                "id": 12863,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3585:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "0x00000001"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "id": 12862,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3578:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 12864,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3578:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3546:50:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303031",
                              "id": 12867,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3607:10:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "0x00000001"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 12866,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3600:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 12868,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3600:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3546:72:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12856,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "3538:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 12870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3538:81:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12871,
                  "nodeType": "ExpressionStatement",
                  "src": "3538:81:52"
                },
                {
                  "id": 12872,
                  "nodeType": "PlaceholderStatement",
                  "src": "3629:1:52"
                }
              ]
            },
            "documentation": null,
            "id": 12874,
            "name": "onlyRegisteredScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12855,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3525:2:52"
            },
            "src": "3496:141:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12893,
              "nodeType": "Block",
              "src": "3677:109:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 12889,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 12885,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12877,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12731,
                                "src": "3695:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 12880,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12878,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22171,
                                  "src": "3703:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12879,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3703:10:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3695:19:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 12881,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12716,
                            "src": "3695:31:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303032",
                                "id": 12883,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3734:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "0x00000002"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                }
                              ],
                              "id": 12882,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3727:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 12884,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3727:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3695:50:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303032",
                              "id": 12887,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3756:10:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "0x00000002"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "id": 12886,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3749:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 12888,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3749:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3695:72:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12876,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "3687:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 12890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3687:81:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12891,
                  "nodeType": "ExpressionStatement",
                  "src": "3687:81:52"
                },
                {
                  "id": 12892,
                  "nodeType": "PlaceholderStatement",
                  "src": "3778:1:52"
                }
              ]
            },
            "documentation": null,
            "id": 12894,
            "name": "onlyRegisteringSchemes",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12875,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3674:2:52"
            },
            "src": "3643:143:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12913,
              "nodeType": "Block",
              "src": "3831:109:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 12909,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 12905,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12897,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12731,
                                "src": "3849:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 12900,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12898,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22171,
                                  "src": "3857:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12899,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3857:10:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3849:19:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 12901,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12716,
                            "src": "3849:31:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303034",
                                "id": 12903,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3888:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "0x00000004"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                }
                              ],
                              "id": 12902,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3881:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 12904,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3881:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3849:50:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303034",
                              "id": 12907,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3910:10:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_4_by_1",
                                "typeString": "int_const 4"
                              },
                              "value": "0x00000004"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_4_by_1",
                                "typeString": "int_const 4"
                              }
                            ],
                            "id": 12906,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3903:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 12908,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3903:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3849:72:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12896,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "3841:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 12910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3841:81:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12911,
                  "nodeType": "ExpressionStatement",
                  "src": "3841:81:52"
                },
                {
                  "id": 12912,
                  "nodeType": "PlaceholderStatement",
                  "src": "3932:1:52"
                }
              ]
            },
            "documentation": null,
            "id": 12914,
            "name": "onlyGlobalConstraintsScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12895,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3828:2:52"
            },
            "src": "3792:148:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12933,
              "nodeType": "Block",
              "src": "3977:109:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 12929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 12925,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12917,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12731,
                                "src": "3995:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 12920,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12918,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22171,
                                  "src": "4003:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12919,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4003:10:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3995:19:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 12921,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12716,
                            "src": "3995:31:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303038",
                                "id": 12923,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4034:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                },
                                "value": "0x00000008"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                }
                              ],
                              "id": 12922,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4027:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 12924,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4027:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3995:50:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303038",
                              "id": 12927,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4056:10:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              },
                              "value": "0x00000008"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              }
                            ],
                            "id": 12926,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4049:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 12928,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4049:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3995:72:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12916,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "3987:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 12930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3987:81:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12931,
                  "nodeType": "ExpressionStatement",
                  "src": "3987:81:52"
                },
                {
                  "id": 12932,
                  "nodeType": "PlaceholderStatement",
                  "src": "4078:1:52"
                }
              ]
            },
            "documentation": null,
            "id": 12934,
            "name": "onlyUpgradingScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12915,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3974:2:52"
            },
            "src": "3946:140:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12953,
              "nodeType": "Block",
              "src": "4125:109:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 12949,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 12945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12937,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12731,
                                "src": "4143:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 12940,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12938,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22171,
                                  "src": "4151:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12939,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4151:10:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4143:19:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 12941,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12716,
                            "src": "4143:31:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303130",
                                "id": 12943,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4182:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                },
                                "value": "0x00000010"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                }
                              ],
                              "id": 12942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4175:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 12944,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4175:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "4143:50:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303130",
                              "id": 12947,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4204:10:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              },
                              "value": "0x00000010"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              }
                            ],
                            "id": 12946,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4197:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 12948,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4197:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "4143:72:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12936,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "4135:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 12950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4135:81:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12951,
                  "nodeType": "ExpressionStatement",
                  "src": "4135:81:52"
                },
                {
                  "id": 12952,
                  "nodeType": "PlaceholderStatement",
                  "src": "4226:1:52"
                }
              ]
            },
            "documentation": null,
            "id": 12954,
            "name": "onlyGenericCallScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12935,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4122:2:52"
            },
            "src": "4092:142:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12973,
              "nodeType": "Block",
              "src": "4270:109:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 12969,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 12965,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12957,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12731,
                                "src": "4288:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 12960,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12958,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22171,
                                  "src": "4296:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12959,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4296:10:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4288:19:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 12961,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12716,
                            "src": "4288:31:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303130",
                                "id": 12963,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4327:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                },
                                "value": "0x00000010"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                }
                              ],
                              "id": 12962,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4320:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 12964,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4320:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "4288:50:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30783030303030303130",
                              "id": 12967,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4349:10:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              },
                              "value": "0x00000010"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              }
                            ],
                            "id": 12966,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4342:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 12968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4342:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "4288:72:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12956,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "4280:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 12970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4280:81:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12971,
                  "nodeType": "ExpressionStatement",
                  "src": "4280:81:52"
                },
                {
                  "id": 12972,
                  "nodeType": "PlaceholderStatement",
                  "src": "4371:1:52"
                }
              ]
            },
            "documentation": null,
            "id": 12974,
            "name": "onlyMetaDataScheme",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12955,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4267:2:52"
            },
            "src": "4240:139:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13046,
              "nodeType": "Block",
              "src": "4432:533:52",
              "statements": [
                {
                  "assignments": [
                    12979
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12979,
                      "name": "idx",
                      "nodeType": "VariableDeclaration",
                      "scope": 13046,
                      "src": "4442:11:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 12978,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4442:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12980,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4442:11:52"
                },
                {
                  "body": {
                    "id": 13011,
                    "nodeType": "Block",
                    "src": "4519:180:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13001,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22171,
                                    "src": "4636:3:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 13002,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4636:10:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 13003,
                                      "name": "globalConstraintsPre",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12742,
                                      "src": "4648:20:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 13005,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 13004,
                                      "name": "idx",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12979,
                                      "src": "4669:3:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4648:25:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 13006,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12721,
                                  "src": "4648:32:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 13007,
                                  "name": "func",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12976,
                                  "src": "4682:4:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 12994,
                                              "name": "globalConstraintsPre",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 12742,
                                              "src": "4581:20:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 12996,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 12995,
                                              "name": "idx",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 12979,
                                              "src": "4602:3:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "4581:25:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                              "typeString": "struct Controller.GlobalConstraint storage ref"
                                            }
                                          },
                                          "id": 12997,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "gcAddress",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 12719,
                                          "src": "4581:35:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 12993,
                                        "name": "GlobalConstraintInterface",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 14504,
                                        "src": "4555:25:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                          "typeString": "type(contract GlobalConstraintInterface)"
                                        }
                                      },
                                      "id": 12998,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4555:62:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_GlobalConstraintInterface_$14504",
                                        "typeString": "contract GlobalConstraintInterface"
                                      }
                                    }
                                  ],
                                  "id": 12999,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "4554:64:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GlobalConstraintInterface_$14504",
                                    "typeString": "contract GlobalConstraintInterface"
                                  }
                                },
                                "id": 13000,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "pre",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 14487,
                                "src": "4554:81:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                                  "typeString": "function (address,bytes32,bytes32) external returns (bool)"
                                }
                              },
                              "id": 13008,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4554:133:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 12992,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22174,
                            "src": "4533:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 13009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4533:155:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13010,
                        "nodeType": "ExpressionStatement",
                        "src": "4533:155:52"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 12988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 12985,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12979,
                      "src": "4477:3:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 12986,
                        "name": "globalConstraintsPre",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12742,
                        "src": "4483:20:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                          "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                        }
                      },
                      "id": 12987,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4483:27:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4477:33:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13012,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 12983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 12981,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12979,
                        "src": "4468:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 12982,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4474:1:52",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4468:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 12984,
                    "nodeType": "ExpressionStatement",
                    "src": "4468:7:52"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 12990,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4512:5:52",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 12989,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12979,
                        "src": "4512:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 12991,
                    "nodeType": "ExpressionStatement",
                    "src": "4512:5:52"
                  },
                  "nodeType": "ForStatement",
                  "src": "4463:236:52"
                },
                {
                  "id": 13013,
                  "nodeType": "PlaceholderStatement",
                  "src": "4708:1:52"
                },
                {
                  "body": {
                    "id": 13044,
                    "nodeType": "Block",
                    "src": "4776:183:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13034,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22171,
                                    "src": "4895:3:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 13035,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4895:10:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 13036,
                                      "name": "globalConstraintsPost",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12745,
                                      "src": "4907:21:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 13038,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 13037,
                                      "name": "idx",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12979,
                                      "src": "4929:3:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4907:26:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 13039,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12721,
                                  "src": "4907:33:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 13040,
                                  "name": "func",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12976,
                                  "src": "4942:4:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 13027,
                                              "name": "globalConstraintsPost",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 12745,
                                              "src": "4838:21:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 13029,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 13028,
                                              "name": "idx",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 12979,
                                              "src": "4860:3:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "4838:26:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                              "typeString": "struct Controller.GlobalConstraint storage ref"
                                            }
                                          },
                                          "id": 13030,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "gcAddress",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 12719,
                                          "src": "4838:36:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 13026,
                                        "name": "GlobalConstraintInterface",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 14504,
                                        "src": "4812:25:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                          "typeString": "type(contract GlobalConstraintInterface)"
                                        }
                                      },
                                      "id": 13031,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4812:63:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_GlobalConstraintInterface_$14504",
                                        "typeString": "contract GlobalConstraintInterface"
                                      }
                                    }
                                  ],
                                  "id": 13032,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "4811:65:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GlobalConstraintInterface_$14504",
                                    "typeString": "contract GlobalConstraintInterface"
                                  }
                                },
                                "id": 13033,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "post",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 14498,
                                "src": "4811:83:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                                  "typeString": "function (address,bytes32,bytes32) external returns (bool)"
                                }
                              },
                              "id": 13041,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4811:136:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 13025,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22174,
                            "src": "4790:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 13042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4790:158:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13043,
                        "nodeType": "ExpressionStatement",
                        "src": "4790:158:52"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13018,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12979,
                      "src": "4733:3:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 13019,
                        "name": "globalConstraintsPost",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12745,
                        "src": "4739:21:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                          "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                        }
                      },
                      "id": 13020,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4739:28:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4733:34:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13045,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 13016,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 13014,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12979,
                        "src": "4724:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 13015,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4730:1:52",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4724:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13017,
                    "nodeType": "ExpressionStatement",
                    "src": "4724:7:52"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 13023,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4769:5:52",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 13022,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12979,
                        "src": "4769:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13024,
                    "nodeType": "ExpressionStatement",
                    "src": "4769:5:52"
                  },
                  "nodeType": "ForStatement",
                  "src": "4719:240:52"
                }
              ]
            },
            "documentation": null,
            "id": 13047,
            "name": "onlySubjectToConstraint",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12977,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12976,
                  "name": "func",
                  "nodeType": "VariableDeclaration",
                  "scope": 13047,
                  "src": "4418:12:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12975,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4418:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4417:14:52"
            },
            "src": "4385:580:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13060,
              "nodeType": "Block",
              "src": "5011:63:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13056,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13052,
                          "name": "_avatar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13049,
                          "src": "5029:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 13054,
                              "name": "avatar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12733,
                              "src": "5048:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Avatar_$12705",
                                "typeString": "contract Avatar"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Avatar_$12705",
                                "typeString": "contract Avatar"
                              }
                            ],
                            "id": 13053,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5040:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 13055,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5040:15:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "5029:26:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13051,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "5021:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13057,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5021:35:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13058,
                  "nodeType": "ExpressionStatement",
                  "src": "5021:35:52"
                },
                {
                  "id": 13059,
                  "nodeType": "PlaceholderStatement",
                  "src": "5066:1:52"
                }
              ]
            },
            "documentation": null,
            "id": 13061,
            "name": "isAvatarValid",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 13050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13049,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13061,
                  "src": "4994:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13048,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4994:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4993:17:52"
            },
            "src": "4971:103:52",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13093,
              "nodeType": "Block",
              "src": "5507:114:52",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13081,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "5537:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13082,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5537:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13083,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13065,
                        "src": "5549:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13084,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13063,
                        "src": "5554:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13080,
                      "name": "MintReputation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12761,
                      "src": "5522:14:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 13085,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5522:40:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13086,
                  "nodeType": "EmitStatement",
                  "src": "5517:45:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13089,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13065,
                        "src": "5601:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13090,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13063,
                        "src": "5606:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13087,
                        "name": "nativeReputation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12737,
                        "src": "5579:16:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Reputation_$16423",
                          "typeString": "contract Reputation"
                        }
                      },
                      "id": 13088,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16185,
                      "src": "5579:21:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 13091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5579:35:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13079,
                  "id": 13092,
                  "nodeType": "Return",
                  "src": "5572:42:52"
                }
              ]
            },
            "documentation": "@dev Mint `_amount` of reputation that are assigned to `_to` .\n@param  _amount amount of reputation to mint\n@param _to beneficiary address\n@return bool which represents a success",
            "id": 13094,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13070,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13069,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12874,
                  "src": "5391:20:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5391:20:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "6d696e7452657075746174696f6e",
                    "id": 13072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5440:16:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_1a219662897983599a6b9002ff87ae94af2205e820352b0884d9af0be457f05d",
                      "typeString": "literal_string \"mintReputation\""
                    },
                    "value": "mintReputation"
                  }
                ],
                "id": 13073,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13071,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "5416:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5416:41:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13075,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13067,
                    "src": "5476:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13076,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13074,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "5462:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5462:22:52"
              }
            ],
            "name": "mintReputation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13068,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13063,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13094,
                  "src": "5327:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13062,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5327:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13065,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 13094,
                  "src": "5344:11:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13064,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5344:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13067,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13094,
                  "src": "5357:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13066,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5357:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5326:47:52"
            },
            "returnParameters": {
              "id": 13079,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13078,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13094,
                  "src": "5497:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13077,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5497:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5496:6:52"
            },
            "scope": 14161,
            "src": "5303:318:52",
            "stateMutability": "nonpayable",
            "superFunction": 14176,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13126,
              "nodeType": "Block",
              "src": "6064:118:52",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13114,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "6094:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13115,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6094:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13116,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13098,
                        "src": "6106:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13117,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13096,
                        "src": "6113:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13113,
                      "name": "BurnReputation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12769,
                      "src": "6079:14:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 13118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6079:42:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13119,
                  "nodeType": "EmitStatement",
                  "src": "6074:47:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13122,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13098,
                        "src": "6160:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13123,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13096,
                        "src": "6167:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13120,
                        "name": "nativeReputation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12737,
                        "src": "6138:16:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Reputation_$16423",
                          "typeString": "contract Reputation"
                        }
                      },
                      "id": 13121,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16244,
                      "src": "6138:21:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 13124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6138:37:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13112,
                  "id": 13125,
                  "nodeType": "Return",
                  "src": "6131:44:52"
                }
              ]
            },
            "documentation": "@dev Burns `_amount` of reputation from `_from`\n@param _amount amount of reputation to burn\n@param _from The address that will lose the reputation\n@return bool which represents a success",
            "id": 13127,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13103,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13102,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12874,
                  "src": "5948:20:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5948:20:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "6275726e52657075746174696f6e",
                    "id": 13105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5997:16:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_701c6a9b3c30976c567c709256889545b87c2151a8fd377ac6f0366a5ce4dd74",
                      "typeString": "literal_string \"burnReputation\""
                    },
                    "value": "burnReputation"
                  }
                ],
                "id": 13106,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13104,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "5973:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5973:41:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13108,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13100,
                    "src": "6033:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13109,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13107,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "6019:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6019:22:52"
              }
            ],
            "name": "burnReputation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13101,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13096,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13127,
                  "src": "5882:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13095,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5882:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13098,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 13127,
                  "src": "5899:13:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13097,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5899:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13100,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13127,
                  "src": "5914:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13099,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5914:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5881:49:52"
            },
            "returnParameters": {
              "id": 13112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13111,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13127,
                  "src": "6054:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13110,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6054:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6053:6:52"
            },
            "scope": 14161,
            "src": "5858:324:52",
            "stateMutability": "nonpayable",
            "superFunction": 14187,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13159,
              "nodeType": "Block",
              "src": "6576:123:52",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13147,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "6602:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6602:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13149,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13131,
                        "src": "6614:12:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13150,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13129,
                        "src": "6628:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13146,
                      "name": "MintTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12777,
                      "src": "6591:10:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 13151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6591:45:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13152,
                  "nodeType": "EmitStatement",
                  "src": "6586:50:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13155,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13131,
                        "src": "6670:12:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13156,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13129,
                        "src": "6684:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13153,
                        "name": "nativeToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12735,
                        "src": "6653:11:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DAOToken_$14470",
                          "typeString": "contract DAOToken"
                        }
                      },
                      "id": 13154,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14469,
                      "src": "6653:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 13157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6653:39:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13145,
                  "id": 13158,
                  "nodeType": "Return",
                  "src": "6646:46:52"
                }
              ]
            },
            "documentation": "@dev mint tokens .\n@param  _amount amount of token to mint\n@param _beneficiary beneficiary address\n@return bool which represents a success",
            "id": 13160,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13136,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13135,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12874,
                  "src": "6464:20:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6464:20:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "6d696e74546f6b656e73",
                    "id": 13138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6513:12:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_21b23862db72e99373f312e35ae4594cf48c0e3462d6964e450d863eb9283120",
                      "typeString": "literal_string \"mintTokens\""
                    },
                    "value": "mintTokens"
                  }
                ],
                "id": 13139,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13137,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "6489:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6489:37:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13141,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13133,
                    "src": "6545:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13142,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13140,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "6531:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6531:22:52"
              }
            ],
            "name": "mintTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13129,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13160,
                  "src": "6391:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13128,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6391:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13131,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13160,
                  "src": "6408:20:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13130,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6408:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13133,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13160,
                  "src": "6430:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13132,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6430:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6390:56:52"
            },
            "returnParameters": {
              "id": 13145,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13144,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13160,
                  "src": "6566:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13143,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6566:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6565:6:52"
            },
            "scope": 14161,
            "src": "6371:328:52",
            "stateMutability": "nonpayable",
            "superFunction": 14198,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13259,
              "nodeType": "Block",
              "src": "7211:876:52",
              "statements": [
                {
                  "assignments": [
                    13182
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13182,
                      "name": "scheme",
                      "nodeType": "VariableDeclaration",
                      "scope": 13259,
                      "src": "7222:20:52",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$12717_memory_ptr",
                        "typeString": "struct Controller.Scheme"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13181,
                        "name": "Scheme",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 12717,
                        "src": "7222:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Scheme_$12717_storage_ptr",
                          "typeString": "struct Controller.Scheme"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13186,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 13183,
                      "name": "schemes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12731,
                      "src": "7245:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                        "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                      }
                    },
                    "id": 13185,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 13184,
                      "name": "_scheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13162,
                      "src": "7253:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7245:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                      "typeString": "struct Controller.Scheme storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7222:39:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 13208,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 13204,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 13196,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30783030303030303166",
                                  "id": 13189,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7567:10:52",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_31_by_1",
                                    "typeString": "int_const 31"
                                  },
                                  "value": "0x0000001f"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_31_by_1",
                                    "typeString": "int_const 31"
                                  }
                                ],
                                "id": 13188,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7560:6:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes4_$",
                                  "typeString": "type(bytes4)"
                                },
                                "typeName": "bytes4"
                              },
                              "id": 13190,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7560:18:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "id": 13194,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 13191,
                                    "name": "_permissions",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13166,
                                    "src": "7580:12:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "^",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13192,
                                      "name": "scheme",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13182,
                                      "src": "7593:6:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Scheme_$12717_memory_ptr",
                                        "typeString": "struct Controller.Scheme memory"
                                      }
                                    },
                                    "id": 13193,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "permissions",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 12716,
                                    "src": "7593:18:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "src": "7580:31:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                }
                              ],
                              "id": 13195,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "7579:33:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "src": "7560:52:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 13202,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "~",
                                "prefix": true,
                                "src": "7614:32:52",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 13197,
                                      "name": "schemes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12731,
                                      "src": "7615:7:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                        "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                      }
                                    },
                                    "id": 13200,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 13198,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 22171,
                                        "src": "7623:3:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 13199,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "7623:10:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "7615:19:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                      "typeString": "struct Controller.Scheme storage ref"
                                    }
                                  },
                                  "id": 13201,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "permissions",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12716,
                                  "src": "7615:31:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "id": 13203,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "7613:34:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "7560:87:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13206,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7658:1:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 13205,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7651:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 13207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7651:9:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "7560:100:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13187,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "7552:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7552:109:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13210,
                  "nodeType": "ExpressionStatement",
                  "src": "7552:109:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 13230,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 13226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303166",
                                "id": 13213,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7771:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x0000001f"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                }
                              ],
                              "id": 13212,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7764:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 13214,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7764:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 13224,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13215,
                                    "name": "scheme",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13182,
                                    "src": "7784:6:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Scheme_$12717_memory_ptr",
                                      "typeString": "struct Controller.Scheme memory"
                                    }
                                  },
                                  "id": 13216,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "permissions",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12716,
                                  "src": "7784:18:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 13222,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "~",
                                      "prefix": true,
                                      "src": "7804:32:52",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 13217,
                                            "name": "schemes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12731,
                                            "src": "7805:7:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                              "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                            }
                                          },
                                          "id": 13220,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 13218,
                                              "name": "msg",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 22171,
                                              "src": "7813:3:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                              }
                                            },
                                            "id": 13219,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "7813:10:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address_payable",
                                              "typeString": "address payable"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "7805:19:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                            "typeString": "struct Controller.Scheme storage ref"
                                          }
                                        },
                                        "id": 13221,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "permissions",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 12716,
                                        "src": "7805:31:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    }
                                  ],
                                  "id": 13223,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7803:34:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "7784:53:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "id": 13225,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "7783:55:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "7764:74:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13228,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7849:1:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 13227,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7842:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 13229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7842:9:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "7764:87:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13211,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "7756:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7756:96:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13232,
                  "nodeType": "ExpressionStatement",
                  "src": "7756:96:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 13233,
                          "name": "schemes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12731,
                          "src": "7896:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                            "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                          }
                        },
                        "id": 13235,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 13234,
                          "name": "_scheme",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13162,
                          "src": "7904:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7896:16:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                          "typeString": "struct Controller.Scheme storage ref"
                        }
                      },
                      "id": 13236,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "paramsHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12714,
                      "src": "7896:27:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13237,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13164,
                      "src": "7926:11:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "7896:41:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 13239,
                  "nodeType": "ExpressionStatement",
                  "src": "7896:41:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 13240,
                          "name": "schemes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12731,
                          "src": "7947:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                            "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                          }
                        },
                        "id": 13242,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 13241,
                          "name": "_scheme",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13162,
                          "src": "7955:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7947:16:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                          "typeString": "struct Controller.Scheme storage ref"
                        }
                      },
                      "id": 13243,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "permissions",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12716,
                      "src": "7947:28:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 13248,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 13244,
                        "name": "_permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13166,
                        "src": "7978:12:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30783030303030303031",
                            "id": 13246,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7998:10:52",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "0x00000001"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            }
                          ],
                          "id": 13245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7991:6:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes4_$",
                            "typeString": "type(bytes4)"
                          },
                          "typeName": "bytes4"
                        },
                        "id": 13247,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7991:18:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "7978:31:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "7947:62:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "id": 13250,
                  "nodeType": "ExpressionStatement",
                  "src": "7947:62:52"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13252,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "8039:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8039:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13254,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13162,
                        "src": "8051:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13251,
                      "name": "RegisterScheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12783,
                      "src": "8024:14:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 13255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8024:35:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13256,
                  "nodeType": "EmitStatement",
                  "src": "8019:40:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 13257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8076:4:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 13180,
                  "id": 13258,
                  "nodeType": "Return",
                  "src": "8069:11:52"
                }
              ]
            },
            "documentation": "@dev register a scheme\n@param _scheme the address of the scheme\n@param _paramsHash a hashed configuration of the usage of the scheme\n@param _permissions the permissions the new scheme will have\n@return bool which represents a success",
            "id": 13260,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13171,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13170,
                  "name": "onlyRegisteringSchemes",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12894,
                  "src": "7093:22:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7093:22:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "7265676973746572536368656d65",
                    "id": 13173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7144:16:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_c6de131411a6b4c4ab26bd5c5ac65f44cdd792220de1a6733d66d35c3433e601",
                      "typeString": "literal_string \"registerScheme\""
                    },
                    "value": "registerScheme"
                  }
                ],
                "id": 13174,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13172,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "7120:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7120:41:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13176,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13168,
                    "src": "7180:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13177,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13175,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "7166:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7166:22:52"
              }
            ],
            "name": "registerScheme",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13162,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 13260,
                  "src": "7000:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13161,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7000:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13164,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 13260,
                  "src": "7017:19:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13163,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7017:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13166,
                  "name": "_permissions",
                  "nodeType": "VariableDeclaration",
                  "scope": 13260,
                  "src": "7038:19:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 13165,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "7038:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13168,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13260,
                  "src": "7059:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13167,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7059:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6999:76:52"
            },
            "returnParameters": {
              "id": 13180,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13179,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13260,
                  "src": "7201:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13178,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7201:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7200:6:52"
            },
            "scope": 14161,
            "src": "6976:1111:52",
            "stateMutability": "nonpayable",
            "superFunction": 14211,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13323,
              "nodeType": "Block",
              "src": "8434:440:52",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13278,
                          "name": "_scheme",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13262,
                          "src": "8508:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 13277,
                        "name": "_isSchemeRegistered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14160,
                        "src": "8488:19:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 13279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8488:28:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 13280,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8520:5:52",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "8488:37:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13285,
                  "nodeType": "IfStatement",
                  "src": "8484:80:52",
                  "trueBody": {
                    "id": 13284,
                    "nodeType": "Block",
                    "src": "8527:37:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 13282,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8548:5:52",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 13276,
                        "id": 13283,
                        "nodeType": "Return",
                        "src": "8541:12:52"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 13307,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 13303,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303166",
                                "id": 13288,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8650:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x0000001f"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                }
                              ],
                              "id": 13287,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8643:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 13289,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8643:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 13301,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 13290,
                                      "name": "schemes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12731,
                                      "src": "8663:7:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                        "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                      }
                                    },
                                    "id": 13292,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 13291,
                                      "name": "_scheme",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13262,
                                      "src": "8671:7:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "8663:16:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                      "typeString": "struct Controller.Scheme storage ref"
                                    }
                                  },
                                  "id": 13293,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "permissions",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12716,
                                  "src": "8663:28:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 13299,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "~",
                                      "prefix": true,
                                      "src": "8693:32:52",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 13294,
                                            "name": "schemes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12731,
                                            "src": "8694:7:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                              "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                            }
                                          },
                                          "id": 13297,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 13295,
                                              "name": "msg",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 22171,
                                              "src": "8702:3:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                              }
                                            },
                                            "id": 13296,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "8702:10:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address_payable",
                                              "typeString": "address payable"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "8694:19:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                            "typeString": "struct Controller.Scheme storage ref"
                                          }
                                        },
                                        "id": 13298,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "permissions",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 12716,
                                        "src": "8694:31:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    }
                                  ],
                                  "id": 13300,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8692:34:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "8663:63:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "id": 13302,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "8662:65:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "8643:84:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13305,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8738:1:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 13304,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8731:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 13306,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8731:9:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "8643:97:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13286,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "8635:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8635:106:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13309,
                  "nodeType": "ExpressionStatement",
                  "src": "8635:106:52"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13311,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "8793:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8793:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13313,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13262,
                        "src": "8805:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13310,
                      "name": "UnregisterScheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12789,
                      "src": "8776:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 13314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8776:37:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13315,
                  "nodeType": "EmitStatement",
                  "src": "8771:42:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8823:23:52",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13316,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12731,
                        "src": "8830:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 13318,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 13317,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13262,
                        "src": "8838:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8830:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13320,
                  "nodeType": "ExpressionStatement",
                  "src": "8823:23:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 13321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8863:4:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 13276,
                  "id": 13322,
                  "nodeType": "Return",
                  "src": "8856:11:52"
                }
              ]
            },
            "documentation": "@dev unregister a scheme\n@param _scheme the address of the scheme\n@return bool which represents a success",
            "id": 13324,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13267,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13266,
                  "name": "onlyRegisteringSchemes",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12894,
                  "src": "8314:22:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8314:22:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "756e7265676973746572536368656d65",
                    "id": 13269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8365:18:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b691bb484251ef01d241995950a354987a3e0c00fe2381f87b564ec41aab942c",
                      "typeString": "literal_string \"unregisterScheme\""
                    },
                    "value": "unregisterScheme"
                  }
                ],
                "id": 13270,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13268,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "8341:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8341:43:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13272,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13264,
                    "src": "8403:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13273,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13271,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "8389:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8389:22:52"
              }
            ],
            "name": "unregisterScheme",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13265,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13262,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 13324,
                  "src": "8263:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13261,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8263:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13264,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13324,
                  "src": "8280:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13263,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8280:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8261:35:52"
            },
            "returnParameters": {
              "id": 13276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13275,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13324,
                  "src": "8424:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13274,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8424:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8423:6:52"
            },
            "scope": 14161,
            "src": "8236:638:52",
            "stateMutability": "nonpayable",
            "superFunction": 14220,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13359,
              "nodeType": "Block",
              "src": "9073:211:52",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13335,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22171,
                            "src": "9107:3:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 13336,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9107:10:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 13334,
                        "name": "_isSchemeRegistered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14160,
                        "src": "9087:19:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 13337,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9087:31:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 13338,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9122:5:52",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "9087:40:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13343,
                  "nodeType": "IfStatement",
                  "src": "9083:83:52",
                  "trueBody": {
                    "id": 13342,
                    "nodeType": "Block",
                    "src": "9129:37:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 13340,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9150:5:52",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 13333,
                        "id": 13341,
                        "nodeType": "Return",
                        "src": "9143:12:52"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "9175:26:52",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13344,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12731,
                        "src": "9182:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 13347,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13345,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9190:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13346,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9190:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9182:19:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13349,
                  "nodeType": "ExpressionStatement",
                  "src": "9175:26:52"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13351,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9233:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9233:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13353,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9245:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13354,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9245:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 13350,
                      "name": "UnregisterScheme",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12789,
                      "src": "9216:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 13355,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9216:40:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13356,
                  "nodeType": "EmitStatement",
                  "src": "9211:45:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 13357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9273:4:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 13333,
                  "id": 13358,
                  "nodeType": "Return",
                  "src": "9266:11:52"
                }
              ]
            },
            "documentation": "@dev unregister the caller's scheme\n@return bool which represents a success",
            "id": 13360,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13329,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13326,
                    "src": "9050:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13330,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13328,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "9036:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9036:22:52"
              }
            ],
            "name": "unregisterSelf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13326,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13360,
                  "src": "9010:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13325,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9010:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9009:17:52"
            },
            "returnParameters": {
              "id": 13333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13332,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13360,
                  "src": "9067:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13331,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9067:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9066:6:52"
            },
            "scope": 14161,
            "src": "8986:298:52",
            "stateMutability": "nonpayable",
            "superFunction": 14227,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13502,
              "nodeType": "Block",
              "src": "9717:1417:52",
              "statements": [
                {
                  "assignments": [
                    13379
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13379,
                      "name": "when",
                      "nodeType": "VariableDeclaration",
                      "scope": 13502,
                      "src": "9727:40:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_CallPhase_$14476",
                        "typeString": "enum GlobalConstraintInterface.CallPhase"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13378,
                        "name": "GlobalConstraintInterface.CallPhase",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14476,
                        "src": "9727:35:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_CallPhase_$14476",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13385,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13381,
                            "name": "_globalConstraint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13362,
                            "src": "9796:17:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 13380,
                          "name": "GlobalConstraintInterface",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14504,
                          "src": "9770:25:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                            "typeString": "type(contract GlobalConstraintInterface)"
                          }
                        },
                        "id": 13382,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9770:44:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GlobalConstraintInterface_$14504",
                          "typeString": "contract GlobalConstraintInterface"
                        }
                      },
                      "id": 13383,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "when",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14503,
                      "src": "9770:49:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_enum$_CallPhase_$14476_$",
                        "typeString": "function () external returns (enum GlobalConstraintInterface.CallPhase)"
                      }
                    },
                    "id": 13384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9770:51:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_CallPhase_$14476",
                      "typeString": "enum GlobalConstraintInterface.CallPhase"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9727:94:52"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13398,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13390,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13386,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13379,
                            "src": "9836:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13387,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "9844:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13388,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "9844:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13389,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "9844:39:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "9836:47:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13391,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "9835:49:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13396,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13392,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13379,
                            "src": "9900:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13393,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "9908:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13394,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "9908:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13395,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "9908:46:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "9900:54:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13397,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "9899:56:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9835:120:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13439,
                  "nodeType": "IfStatement",
                  "src": "9831:596:52",
                  "trueBody": {
                    "id": 13438,
                    "nodeType": "Block",
                    "src": "9957:470:52",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 13403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "9975:61:52",
                          "subExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 13399,
                                "name": "globalConstraintsRegisterPre",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12749,
                                "src": "9976:28:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                  "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                }
                              },
                              "id": 13401,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 13400,
                                "name": "_globalConstraint",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13362,
                                "src": "10005:17:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9976:47:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                              }
                            },
                            "id": 13402,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isRegistered",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12724,
                            "src": "9976:60:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 13436,
                          "nodeType": "Block",
                          "src": "10292:125:52",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13434,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 13426,
                                      "name": "globalConstraintsPre",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12742,
                                      "src": "10310:20:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 13431,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 13427,
                                          "name": "globalConstraintsRegisterPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12749,
                                          "src": "10331:28:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                            "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                          }
                                        },
                                        "id": 13429,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 13428,
                                          "name": "_globalConstraint",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13362,
                                          "src": "10360:17:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "10331:47:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                          "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                        }
                                      },
                                      "id": 13430,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "index",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 12726,
                                      "src": "10331:53:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10310:75:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 13432,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12721,
                                  "src": "10310:82:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 13433,
                                  "name": "_params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13364,
                                  "src": "10395:7:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "10310:92:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 13435,
                              "nodeType": "ExpressionStatement",
                              "src": "10310:92:52"
                            }
                          ]
                        },
                        "id": 13437,
                        "nodeType": "IfStatement",
                        "src": "9971:446:52",
                        "trueBody": {
                          "id": 13425,
                          "nodeType": "Block",
                          "src": "10038:249:52",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 13408,
                                        "name": "_globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13362,
                                        "src": "10099:17:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 13409,
                                        "name": "_params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13364,
                                        "src": "10118:7:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 13407,
                                      "name": "GlobalConstraint",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12722,
                                      "src": "10082:16:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_struct$_GlobalConstraint_$12722_storage_ptr_$",
                                        "typeString": "type(struct Controller.GlobalConstraint storage pointer)"
                                      }
                                    },
                                    "id": 13410,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "structConstructorCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10082:44:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13404,
                                    "name": "globalConstraintsPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12742,
                                    "src": "10056:20:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 13406,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "10056:25:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_GlobalConstraint_$12722_storage_$returns$_t_uint256_$",
                                    "typeString": "function (struct Controller.GlobalConstraint storage ref) returns (uint256)"
                                  }
                                },
                                "id": 13411,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10056:71:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 13412,
                              "nodeType": "ExpressionStatement",
                              "src": "10056:71:52"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13423,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 13413,
                                    "name": "globalConstraintsRegisterPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12749,
                                    "src": "10145:28:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 13415,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 13414,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13362,
                                    "src": "10174:17:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "10145:47:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "74727565",
                                      "id": 13417,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10236:4:52",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "true"
                                    },
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 13421,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 13418,
                                          "name": "globalConstraintsPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12742,
                                          "src": "10242:20:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 13419,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "10242:27:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 13420,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10270:1:52",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "10242:29:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 13416,
                                    "name": "GlobalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12727,
                                    "src": "10211:24:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_struct$_GlobalConstraintRegister_$12727_storage_ptr_$",
                                      "typeString": "type(struct Controller.GlobalConstraintRegister storage pointer)"
                                    }
                                  },
                                  "id": 13422,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "structConstructorCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10211:61:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory",
                                    "typeString": "struct Controller.GlobalConstraintRegister memory"
                                  }
                                },
                                "src": "10145:127:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                  "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                }
                              },
                              "id": 13424,
                              "nodeType": "ExpressionStatement",
                              "src": "10145:127:52"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13452,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13440,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13379,
                            "src": "10441:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13441,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "10449:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13442,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "10449:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13443,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "10449:40:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "10441:48:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13445,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "10440:50:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13446,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13379,
                            "src": "10506:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13447,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "10514:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13448,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "10514:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13449,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "10514:46:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "10506:54:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13451,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "10505:56:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10440:121:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13493,
                  "nodeType": "IfStatement",
                  "src": "10436:603:52",
                  "trueBody": {
                    "id": 13492,
                    "nodeType": "Block",
                    "src": "10563:476:52",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 13457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "10581:62:52",
                          "subExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 13453,
                                "name": "globalConstraintsRegisterPost",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12753,
                                "src": "10582:29:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                  "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                }
                              },
                              "id": 13455,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 13454,
                                "name": "_globalConstraint",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13362,
                                "src": "10612:17:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10582:48:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                              }
                            },
                            "id": 13456,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isRegistered",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12724,
                            "src": "10582:61:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 13490,
                          "nodeType": "Block",
                          "src": "10902:127:52",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13488,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 13480,
                                      "name": "globalConstraintsPost",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12745,
                                      "src": "10920:21:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 13485,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 13481,
                                          "name": "globalConstraintsRegisterPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12753,
                                          "src": "10942:29:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                            "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                          }
                                        },
                                        "id": 13483,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 13482,
                                          "name": "_globalConstraint",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13362,
                                          "src": "10972:17:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "10942:48:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                          "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                        }
                                      },
                                      "id": 13484,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "index",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 12726,
                                      "src": "10942:54:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10920:77:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref"
                                    }
                                  },
                                  "id": 13486,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "params",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12721,
                                  "src": "10920:84:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 13487,
                                  "name": "_params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13364,
                                  "src": "11007:7:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "10920:94:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 13489,
                              "nodeType": "ExpressionStatement",
                              "src": "10920:94:52"
                            }
                          ]
                        },
                        "id": 13491,
                        "nodeType": "IfStatement",
                        "src": "10577:452:52",
                        "trueBody": {
                          "id": 13479,
                          "nodeType": "Block",
                          "src": "10645:252:52",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 13462,
                                        "name": "_globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13362,
                                        "src": "10707:17:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 13463,
                                        "name": "_params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13364,
                                        "src": "10726:7:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 13461,
                                      "name": "GlobalConstraint",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12722,
                                      "src": "10690:16:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_struct$_GlobalConstraint_$12722_storage_ptr_$",
                                        "typeString": "type(struct Controller.GlobalConstraint storage pointer)"
                                      }
                                    },
                                    "id": 13464,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "structConstructorCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10690:44:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory",
                                      "typeString": "struct Controller.GlobalConstraint memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13458,
                                    "name": "globalConstraintsPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12745,
                                    "src": "10663:21:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 13460,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "10663:26:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_GlobalConstraint_$12722_storage_$returns$_t_uint256_$",
                                    "typeString": "function (struct Controller.GlobalConstraint storage ref) returns (uint256)"
                                  }
                                },
                                "id": 13465,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10663:72:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 13466,
                              "nodeType": "ExpressionStatement",
                              "src": "10663:72:52"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13477,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 13467,
                                    "name": "globalConstraintsRegisterPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12753,
                                    "src": "10753:29:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 13469,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 13468,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13362,
                                    "src": "10783:17:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "10753:48:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "74727565",
                                      "id": 13471,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10845:4:52",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "true"
                                    },
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 13475,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 13472,
                                          "name": "globalConstraintsPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12745,
                                          "src": "10851:21:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 13473,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "10851:28:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 13474,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10880:1:52",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "10851:30:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 13470,
                                    "name": "GlobalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12727,
                                    "src": "10820:24:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_struct$_GlobalConstraintRegister_$12727_storage_ptr_$",
                                      "typeString": "type(struct Controller.GlobalConstraintRegister storage pointer)"
                                    }
                                  },
                                  "id": 13476,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "structConstructorCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10820:62:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory",
                                    "typeString": "struct Controller.GlobalConstraintRegister memory"
                                  }
                                },
                                "src": "10753:129:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                  "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                }
                              },
                              "id": 13478,
                              "nodeType": "ExpressionStatement",
                              "src": "10753:129:52"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13495,
                        "name": "_globalConstraint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13362,
                        "src": "11073:17:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13496,
                        "name": "_params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13364,
                        "src": "11092:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13497,
                        "name": "when",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13379,
                        "src": "11101:4:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_CallPhase_$14476",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_enum$_CallPhase_$14476",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      ],
                      "id": 13494,
                      "name": "AddGlobalConstraint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12803,
                      "src": "11053:19:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_enum$_CallPhase_$14476_$returns$__$",
                        "typeString": "function (address,bytes32,enum GlobalConstraintInterface.CallPhase)"
                      }
                    },
                    "id": 13498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11053:53:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13499,
                  "nodeType": "EmitStatement",
                  "src": "11048:58:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 13500,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11123:4:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 13375,
                  "id": 13501,
                  "nodeType": "Return",
                  "src": "11116:11:52"
                }
              ]
            },
            "documentation": "@dev add or update Global Constraint\n@param _globalConstraint the address of the global constraint to be added.\n@param _params the constraint parameters hash.\n@return bool which represents a success",
            "id": 13503,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13369,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13368,
                  "name": "onlyGlobalConstraintsScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12914,
                  "src": "9640:27:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9640:27:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13371,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13366,
                    "src": "9686:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13372,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13370,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "9672:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9672:22:52"
              }
            ],
            "name": "addGlobalConstraint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13367,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13362,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 13503,
                  "src": "9562:25:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13361,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9562:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13364,
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 13503,
                  "src": "9589:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13363,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9589:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13366,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13503,
                  "src": "9606:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13365,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9606:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9561:61:52"
            },
            "returnParameters": {
              "id": 13375,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13374,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13503,
                  "src": "9707:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13373,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9707:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9706:6:52"
            },
            "scope": 14161,
            "src": "9533:1601:52",
            "stateMutability": "nonpayable",
            "superFunction": 14238,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13699,
              "nodeType": "Block",
              "src": "11544:2234:52",
              "statements": [
                {
                  "assignments": [
                    13518
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13518,
                      "name": "globalConstraintRegister",
                      "nodeType": "VariableDeclaration",
                      "scope": 13699,
                      "src": "11554:56:52",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13517,
                        "name": "GlobalConstraintRegister",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 12727,
                        "src": "11554:24:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage_ptr",
                          "typeString": "struct Controller.GlobalConstraintRegister"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13519,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11554:56:52"
                },
                {
                  "assignments": [
                    13521
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13521,
                      "name": "globalConstraint",
                      "nodeType": "VariableDeclaration",
                      "scope": 13699,
                      "src": "11620:40:52",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraint"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13520,
                        "name": "GlobalConstraint",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 12722,
                        "src": "11620:16:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage_ptr",
                          "typeString": "struct Controller.GlobalConstraint"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13522,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11620:40:52"
                },
                {
                  "assignments": [
                    13526
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13526,
                      "name": "when",
                      "nodeType": "VariableDeclaration",
                      "scope": 13699,
                      "src": "11670:40:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_CallPhase_$14476",
                        "typeString": "enum GlobalConstraintInterface.CallPhase"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13525,
                        "name": "GlobalConstraintInterface.CallPhase",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14476,
                        "src": "11670:35:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_CallPhase_$14476",
                          "typeString": "enum GlobalConstraintInterface.CallPhase"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13532,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13528,
                            "name": "_globalConstraint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13505,
                            "src": "11739:17:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 13527,
                          "name": "GlobalConstraintInterface",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14504,
                          "src": "11713:25:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                            "typeString": "type(contract GlobalConstraintInterface)"
                          }
                        },
                        "id": 13529,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11713:44:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GlobalConstraintInterface_$14504",
                          "typeString": "contract GlobalConstraintInterface"
                        }
                      },
                      "id": 13530,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "when",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14503,
                      "src": "11713:49:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_enum$_CallPhase_$14476_$",
                        "typeString": "function () external returns (enum GlobalConstraintInterface.CallPhase)"
                      }
                    },
                    "id": 13531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11713:51:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_CallPhase_$14476",
                      "typeString": "enum GlobalConstraintInterface.CallPhase"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11670:94:52"
                },
                {
                  "assignments": [
                    13534
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13534,
                      "name": "retVal",
                      "nodeType": "VariableDeclaration",
                      "scope": 13699,
                      "src": "11774:11:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 13533,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "11774:4:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13536,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 13535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11788:5:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11774:19:52"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13537,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13526,
                            "src": "11809:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13538,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "11817:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13539,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "11817:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13540,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "11817:39:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "11809:47:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13542,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "11808:49:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13543,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13526,
                            "src": "11873:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13544,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "11881:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13545,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "11881:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13546,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "11881:46:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "11873:54:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13548,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "11872:56:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11808:120:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13609,
                  "nodeType": "IfStatement",
                  "src": "11804:852:52",
                  "trueBody": {
                    "id": 13608,
                    "nodeType": "Block",
                    "src": "11930:726:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 13554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 13550,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13518,
                            "src": "11944:24:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 13551,
                              "name": "globalConstraintsRegisterPre",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12749,
                              "src": "11971:28:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 13553,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 13552,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13505,
                              "src": "12000:17:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11971:47:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "src": "11944:74:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                          }
                        },
                        "id": 13555,
                        "nodeType": "ExpressionStatement",
                        "src": "11944:74:52"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13556,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13518,
                            "src": "12036:24:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "id": 13557,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12724,
                          "src": "12036:37:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 13607,
                        "nodeType": "IfStatement",
                        "src": "12032:614:52",
                        "trueBody": {
                          "id": 13606,
                          "nodeType": "Block",
                          "src": "12075:571:52",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 13564,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13558,
                                    "name": "globalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13518,
                                    "src": "12097:24:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                      "typeString": "struct Controller.GlobalConstraintRegister memory"
                                    }
                                  },
                                  "id": 13559,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "index",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12726,
                                  "src": "12097:30:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 13563,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13560,
                                      "name": "globalConstraintsPre",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12742,
                                      "src": "12130:20:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 13561,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "12130:27:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 13562,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12158:1:52",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "12130:29:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "12097:62:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 13591,
                              "nodeType": "IfStatement",
                              "src": "12093:389:52",
                              "trueBody": {
                                "id": 13590,
                                "nodeType": "Block",
                                "src": "12161:321:52",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13572,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 13565,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13521,
                                        "src": "12183:16:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 13566,
                                          "name": "globalConstraintsPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12742,
                                          "src": "12202:20:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 13571,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 13570,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 13567,
                                              "name": "globalConstraintsPre",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 12742,
                                              "src": "12223:20:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 13568,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "12223:27:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 13569,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "12251:1:52",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "12223:29:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "12202:51:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "src": "12183:70:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                        "typeString": "struct Controller.GlobalConstraint memory"
                                      }
                                    },
                                    "id": 13573,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12183:70:52"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13579,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 13574,
                                          "name": "globalConstraintsPre",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12742,
                                          "src": "12275:20:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 13577,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 13575,
                                            "name": "globalConstraintRegister",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 13518,
                                            "src": "12296:24:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                                            }
                                          },
                                          "id": 13576,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "index",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 12726,
                                          "src": "12296:30:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "12275:52:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 13578,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13521,
                                        "src": "12330:16:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "src": "12275:71:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref"
                                      }
                                    },
                                    "id": 13580,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12275:71:52"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13588,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 13581,
                                            "name": "globalConstraintsRegisterPre",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12749,
                                            "src": "12368:28:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                            }
                                          },
                                          "id": 13584,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 13582,
                                              "name": "globalConstraint",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 13521,
                                              "src": "12397:16:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                                "typeString": "struct Controller.GlobalConstraint memory"
                                              }
                                            },
                                            "id": 13583,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "gcAddress",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12719,
                                            "src": "12397:26:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "12368:56:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                            "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                          }
                                        },
                                        "id": 13585,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 12726,
                                        "src": "12368:62:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 13586,
                                          "name": "globalConstraintRegister",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13518,
                                          "src": "12433:24:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                                          }
                                        },
                                        "id": 13587,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 12726,
                                        "src": "12433:30:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12368:95:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 13589,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12368:95:52"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13595,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "--",
                                "prefix": false,
                                "src": "12499:29:52",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13592,
                                    "name": "globalConstraintsPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12742,
                                    "src": "12499:20:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 13594,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "12499:27:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 13596,
                              "nodeType": "ExpressionStatement",
                              "src": "12499:29:52"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13600,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "12546:54:52",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 13597,
                                    "name": "globalConstraintsRegisterPre",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12749,
                                    "src": "12553:28:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 13599,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 13598,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13505,
                                    "src": "12582:17:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "12553:47:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 13601,
                              "nodeType": "ExpressionStatement",
                              "src": "12546:54:52"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13604,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 13602,
                                  "name": "retVal",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13534,
                                  "src": "12618:6:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 13603,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12627:4:52",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "12618:13:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 13605,
                              "nodeType": "ExpressionStatement",
                              "src": "12618:13:52"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13622,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13614,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13610,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13526,
                            "src": "12670:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13611,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "12678:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13612,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "12678:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13613,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "12678:40:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "12670:48:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13615,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "12669:50:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_CallPhase_$14476",
                            "typeString": "enum GlobalConstraintInterface.CallPhase"
                          },
                          "id": 13620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13616,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13526,
                            "src": "12735:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13617,
                                "name": "GlobalConstraintInterface",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "12743:25:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                  "typeString": "type(contract GlobalConstraintInterface)"
                                }
                              },
                              "id": 13618,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "CallPhase",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14476,
                              "src": "12743:35:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                              }
                            },
                            "id": 13619,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "PreAndPost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "12743:46:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_CallPhase_$14476",
                              "typeString": "enum GlobalConstraintInterface.CallPhase"
                            }
                          },
                          "src": "12735:54:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 13621,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "12734:56:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "12669:121:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13682,
                  "nodeType": "IfStatement",
                  "src": "12665:861:52",
                  "trueBody": {
                    "id": 13681,
                    "nodeType": "Block",
                    "src": "12792:734:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 13627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 13623,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13518,
                            "src": "12806:24:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 13624,
                              "name": "globalConstraintsRegisterPost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12753,
                              "src": "12833:29:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 13626,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 13625,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13505,
                              "src": "12863:17:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12833:48:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "src": "12806:75:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                          }
                        },
                        "id": 13628,
                        "nodeType": "ExpressionStatement",
                        "src": "12806:75:52"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13629,
                            "name": "globalConstraintRegister",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13518,
                            "src": "12899:24:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                            }
                          },
                          "id": 13630,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12724,
                          "src": "12899:37:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 13680,
                        "nodeType": "IfStatement",
                        "src": "12895:621:52",
                        "trueBody": {
                          "id": 13679,
                          "nodeType": "Block",
                          "src": "12938:578:52",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 13637,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13631,
                                    "name": "globalConstraintRegister",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13518,
                                    "src": "12960:24:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                      "typeString": "struct Controller.GlobalConstraintRegister memory"
                                    }
                                  },
                                  "id": 13632,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "index",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12726,
                                  "src": "12960:30:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 13636,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13633,
                                      "name": "globalConstraintsPost",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12745,
                                      "src": "12993:21:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                      }
                                    },
                                    "id": 13634,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "12993:28:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 13635,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "13022:1:52",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "12993:30:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "12960:63:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 13664,
                              "nodeType": "IfStatement",
                              "src": "12956:394:52",
                              "trueBody": {
                                "id": 13663,
                                "nodeType": "Block",
                                "src": "13025:325:52",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13645,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 13638,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13521,
                                        "src": "13047:16:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 13639,
                                          "name": "globalConstraintsPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12745,
                                          "src": "13066:21:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 13644,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 13643,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 13640,
                                              "name": "globalConstraintsPost",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 12745,
                                              "src": "13088:21:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                              }
                                            },
                                            "id": 13641,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "13088:28:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 13642,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "13117:1:52",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "13088:30:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "13066:53:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "src": "13047:72:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                        "typeString": "struct Controller.GlobalConstraint memory"
                                      }
                                    },
                                    "id": 13646,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13047:72:52"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13652,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 13647,
                                          "name": "globalConstraintsPost",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12745,
                                          "src": "13141:21:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                          }
                                        },
                                        "id": 13650,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 13648,
                                            "name": "globalConstraintRegister",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 13518,
                                            "src": "13163:24:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                              "typeString": "struct Controller.GlobalConstraintRegister memory"
                                            }
                                          },
                                          "id": 13649,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "index",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 12726,
                                          "src": "13163:30:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "13141:53:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                          "typeString": "struct Controller.GlobalConstraint storage ref"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 13651,
                                        "name": "globalConstraint",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13521,
                                        "src": "13197:16:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      },
                                      "src": "13141:72:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                                        "typeString": "struct Controller.GlobalConstraint storage ref"
                                      }
                                    },
                                    "id": 13653,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13141:72:52"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 13661,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 13654,
                                            "name": "globalConstraintsRegisterPost",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12753,
                                            "src": "13235:29:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                              "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                            }
                                          },
                                          "id": 13657,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 13655,
                                              "name": "globalConstraint",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 13521,
                                              "src": "13265:16:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GlobalConstraint_$12722_memory_ptr",
                                                "typeString": "struct Controller.GlobalConstraint memory"
                                              }
                                            },
                                            "id": 13656,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "gcAddress",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12719,
                                            "src": "13265:26:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "13235:57:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                            "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                          }
                                        },
                                        "id": 13658,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 12726,
                                        "src": "13235:63:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 13659,
                                          "name": "globalConstraintRegister",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13518,
                                          "src": "13301:24:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                            "typeString": "struct Controller.GlobalConstraintRegister memory"
                                          }
                                        },
                                        "id": 13660,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "index",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 12726,
                                        "src": "13301:30:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "13235:96:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 13662,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13235:96:52"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13668,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "--",
                                "prefix": false,
                                "src": "13367:30:52",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13665,
                                    "name": "globalConstraintsPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12745,
                                    "src": "13367:21:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                      "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                                    }
                                  },
                                  "id": 13667,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "13367:28:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 13669,
                              "nodeType": "ExpressionStatement",
                              "src": "13367:30:52"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13673,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "13415:55:52",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 13670,
                                    "name": "globalConstraintsRegisterPost",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12753,
                                    "src": "13422:29:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                      "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                                    }
                                  },
                                  "id": 13672,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 13671,
                                    "name": "_globalConstraint",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13505,
                                    "src": "13452:17:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "13422:48:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                                    "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 13674,
                              "nodeType": "ExpressionStatement",
                              "src": "13415:55:52"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 13677,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 13675,
                                  "name": "retVal",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13534,
                                  "src": "13488:6:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 13676,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "13497:4:52",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "13488:13:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 13678,
                              "nodeType": "ExpressionStatement",
                              "src": "13488:13:52"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 13683,
                    "name": "retVal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13534,
                    "src": "13539:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13696,
                  "nodeType": "IfStatement",
                  "src": "13535:214:52",
                  "trueBody": {
                    "id": 13695,
                    "nodeType": "Block",
                    "src": "13547:202:52",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 13685,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13505,
                              "src": "13602:17:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13686,
                                "name": "globalConstraintRegister",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13518,
                                "src": "13633:24:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                  "typeString": "struct Controller.GlobalConstraintRegister memory"
                                }
                              },
                              "id": 13687,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "index",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12726,
                              "src": "13633:30:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_CallPhase_$14476",
                                "typeString": "enum GlobalConstraintInterface.CallPhase"
                              },
                              "id": 13692,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 13688,
                                "name": "when",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13526,
                                "src": "13677:4:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_CallPhase_$14476",
                                  "typeString": "enum GlobalConstraintInterface.CallPhase"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13689,
                                    "name": "GlobalConstraintInterface",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14504,
                                    "src": "13685:25:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_GlobalConstraintInterface_$14504_$",
                                      "typeString": "type(contract GlobalConstraintInterface)"
                                    }
                                  },
                                  "id": 13690,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "CallPhase",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 14476,
                                  "src": "13685:35:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_CallPhase_$14476_$",
                                    "typeString": "type(enum GlobalConstraintInterface.CallPhase)"
                                  }
                                },
                                "id": 13691,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "Pre",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "13685:39:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_CallPhase_$14476",
                                  "typeString": "enum GlobalConstraintInterface.CallPhase"
                                }
                              },
                              "src": "13677:47:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 13684,
                            "name": "RemoveGlobalConstraint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12811,
                            "src": "13566:22:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                              "typeString": "function (address,uint256,bool)"
                            }
                          },
                          "id": 13693,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13566:172:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13694,
                        "nodeType": "EmitStatement",
                        "src": "13561:177:52"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13697,
                    "name": "retVal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13534,
                    "src": "13765:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13516,
                  "id": 13698,
                  "nodeType": "Return",
                  "src": "13758:13:52"
                }
              ]
            },
            "documentation": "@dev remove Global Constraint\n@param _globalConstraint the address of the global constraint to be remove.\n@return bool which represents a success",
            "id": 13700,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13510,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13509,
                  "name": "onlyGlobalConstraintsScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12914,
                  "src": "11467:27:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11467:27:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13512,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13507,
                    "src": "11513:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13513,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13511,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "11499:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11499:22:52"
              }
            ],
            "name": "removeGlobalConstraint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13508,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13505,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 13700,
                  "src": "11406:25:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13504,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11406:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13507,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13700,
                  "src": "11433:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13506,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11433:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11405:44:52"
            },
            "returnParameters": {
              "id": 13516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13515,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13700,
                  "src": "11534:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13514,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11534:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11533:6:52"
            },
            "scope": 14161,
            "src": "11373:2405:52",
            "stateMutability": "nonpayable",
            "superFunction": 14247,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13805,
              "nodeType": "Block",
              "src": "14170:756:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13721,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13717,
                          "name": "newController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12739,
                          "src": "14188:13:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13719,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14213:1:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 13718,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14205:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 13720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14205:10:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "14188:27:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13716,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "14180:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14180:36:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13723,
                  "nodeType": "ExpressionStatement",
                  "src": "14180:36:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13729,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13725,
                          "name": "_newController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13702,
                          "src": "14289:14:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13727,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14315:1:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 13726,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14307:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 13728,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14307:10:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "14289:28:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13724,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "14281:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14281:37:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13731,
                  "nodeType": "ExpressionStatement",
                  "src": "14281:37:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13732,
                      "name": "newController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12739,
                      "src": "14328:13:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13733,
                      "name": "_newController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13702,
                      "src": "14344:14:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14328:30:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 13735,
                  "nodeType": "ExpressionStatement",
                  "src": "14328:30:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13739,
                        "name": "_newController",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13702,
                        "src": "14393:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13736,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "14368:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 13738,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21393,
                      "src": "14368:24:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 13740,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14368:40:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13741,
                  "nodeType": "ExpressionStatement",
                  "src": "14368:40:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13747,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 13743,
                              "name": "avatar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12733,
                              "src": "14426:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Avatar_$12705",
                                "typeString": "contract Avatar"
                              }
                            },
                            "id": 13744,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21342,
                            "src": "14426:12:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 13745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14426:14:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 13746,
                          "name": "_newController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13702,
                          "src": "14444:14:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "14426:32:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13742,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "14418:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14418:41:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13749,
                  "nodeType": "ExpressionStatement",
                  "src": "14418:41:52"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 13756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 13750,
                          "name": "nativeToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12735,
                          "src": "14473:11:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DAOToken_$14470",
                            "typeString": "contract DAOToken"
                          }
                        },
                        "id": 13751,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21342,
                        "src": "14473:17:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 13752,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14473:19:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13754,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22211,
                          "src": "14504:4:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Controller_$14161",
                            "typeString": "contract Controller"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Controller_$14161",
                            "typeString": "contract Controller"
                          }
                        ],
                        "id": 13753,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14496:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 13755,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14496:13:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14473:36:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13772,
                  "nodeType": "IfStatement",
                  "src": "14469:172:52",
                  "trueBody": {
                    "id": 13771,
                    "nodeType": "Block",
                    "src": "14511:130:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 13760,
                              "name": "_newController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13702,
                              "src": "14555:14:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 13757,
                              "name": "nativeToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12735,
                              "src": "14525:11:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_DAOToken_$14470",
                                "typeString": "contract DAOToken"
                              }
                            },
                            "id": 13759,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferOwnership",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21393,
                            "src": "14525:29:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 13761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14525:45:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13762,
                        "nodeType": "ExpressionStatement",
                        "src": "14525:45:52"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 13768,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13764,
                                    "name": "nativeToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12735,
                                    "src": "14592:11:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_DAOToken_$14470",
                                      "typeString": "contract DAOToken"
                                    }
                                  },
                                  "id": 13765,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "owner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21342,
                                  "src": "14592:17:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                    "typeString": "function () view external returns (address)"
                                  }
                                },
                                "id": 13766,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14592:19:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 13767,
                                "name": "_newController",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13702,
                                "src": "14615:14:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "14592:37:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 13763,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22174,
                            "src": "14584:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 13769,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14584:46:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13770,
                        "nodeType": "ExpressionStatement",
                        "src": "14584:46:52"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 13779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 13773,
                          "name": "nativeReputation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12737,
                          "src": "14654:16:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Reputation_$16423",
                            "typeString": "contract Reputation"
                          }
                        },
                        "id": 13774,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21342,
                        "src": "14654:22:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 13775,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14654:24:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13777,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22211,
                          "src": "14690:4:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Controller_$14161",
                            "typeString": "contract Controller"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Controller_$14161",
                            "typeString": "contract Controller"
                          }
                        ],
                        "id": 13776,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14682:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 13778,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14682:13:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14654:41:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13795,
                  "nodeType": "IfStatement",
                  "src": "14650:187:52",
                  "trueBody": {
                    "id": 13794,
                    "nodeType": "Block",
                    "src": "14697:140:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 13783,
                              "name": "_newController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13702,
                              "src": "14746:14:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 13780,
                              "name": "nativeReputation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12737,
                              "src": "14711:16:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Reputation_$16423",
                                "typeString": "contract Reputation"
                              }
                            },
                            "id": 13782,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferOwnership",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21393,
                            "src": "14711:34:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 13784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14711:50:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13785,
                        "nodeType": "ExpressionStatement",
                        "src": "14711:50:52"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 13791,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13787,
                                    "name": "nativeReputation",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12737,
                                    "src": "14783:16:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Reputation_$16423",
                                      "typeString": "contract Reputation"
                                    }
                                  },
                                  "id": 13788,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "owner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21342,
                                  "src": "14783:22:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                    "typeString": "function () view external returns (address)"
                                  }
                                },
                                "id": 13789,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14783:24:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 13790,
                                "name": "_newController",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13702,
                                "src": "14811:14:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "14783:42:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 13786,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22174,
                            "src": "14775:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 13792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14775:51:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13793,
                        "nodeType": "ExpressionStatement",
                        "src": "14775:51:52"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13798,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22211,
                            "src": "14877:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Controller_$14161",
                              "typeString": "contract Controller"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Controller_$14161",
                              "typeString": "contract Controller"
                            }
                          ],
                          "id": 13797,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14869:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 13799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14869:13:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13800,
                        "name": "newController",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12739,
                        "src": "14884:13:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13796,
                      "name": "UpgradeController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12795,
                      "src": "14851:17:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 13801,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14851:47:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13802,
                  "nodeType": "EmitStatement",
                  "src": "14846:52:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 13803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "14915:4:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 13715,
                  "id": 13804,
                  "nodeType": "Return",
                  "src": "14908:11:52"
                }
              ]
            },
            "documentation": "@dev upgrade the Controller\n     The function will trigger an event 'UpgradeController'.\n@param  _newController the address of the new controller.\n@return bool which represents a success",
            "id": 13806,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13707,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13706,
                  "name": "onlyUpgradingScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12934,
                  "src": "14092:19:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14092:19:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13710,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13704,
                        "src": "14138:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 13709,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "14130:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13711,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14130:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 13712,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13708,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "14116:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14116:31:52"
              }
            ],
            "name": "upgradeController",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13705,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13702,
                  "name": "_newController",
                  "nodeType": "VariableDeclaration",
                  "scope": 13806,
                  "src": "14035:22:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13701,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14035:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13704,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13806,
                  "src": "14059:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13703,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "14059:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14034:40:52"
            },
            "returnParameters": {
              "id": 13715,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13714,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13806,
                  "src": "14160:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13713,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14160:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14159:6:52"
            },
            "scope": 14161,
            "src": "14008:918:52",
            "stateMutability": "nonpayable",
            "superFunction": 14256,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13838,
              "nodeType": "Block",
              "src": "15606:68:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13833,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13808,
                        "src": "15642:9:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13834,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13810,
                        "src": "15653:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13835,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13814,
                        "src": "15660:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13831,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "15623:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 13832,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "genericCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12563,
                      "src": "15623:18:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (address,bytes memory,uint256) external returns (bool,bytes memory)"
                      }
                    },
                    "id": 13836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15623:44:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "functionReturnParameters": 13830,
                  "id": 13837,
                  "nodeType": "Return",
                  "src": "15616:51:52"
                }
              ]
            },
            "documentation": "@dev perform a generic call to an arbitrary contract\n@param _contract  the contract's address to call\n@param _data ABI-encoded contract call to call `_contract` address.\n@param _avatar the controller's avatar address\n@param _value value (ETH) to transfer with the transaction\n@return bool -success\n        bytes  - the return value of the called _contract's function.",
            "id": 13839,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13817,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13816,
                  "name": "onlyGenericCallScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12954,
                  "src": "15468:21:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15468:21:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "67656e6572696343616c6c",
                    "id": 13819,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "15518:13:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_f50c9c0d8078680ea2ffd7664f6b8e067777195c71561a9aa7bb8b53f908fb39",
                      "typeString": "literal_string \"genericCall\""
                    },
                    "value": "genericCall"
                  }
                ],
                "id": 13820,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13818,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "15494:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15494:38:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13823,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13812,
                        "src": "15559:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 13822,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "15551:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13824,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15551:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 13825,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13821,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "15537:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15537:31:52"
              }
            ],
            "name": "genericCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13815,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13808,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 13839,
                  "src": "15378:17:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13807,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15378:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13810,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 13839,
                  "src": "15397:20:52",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13809,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15397:5:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13812,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13839,
                  "src": "15419:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13811,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "15419:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13814,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 13839,
                  "src": "15435:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13813,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15435:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15377:73:52"
            },
            "returnParameters": {
              "id": 13830,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13827,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13839,
                  "src": "15582:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13826,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15582:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13829,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13839,
                  "src": "15588:12:52",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13828,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15588:5:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15581:20:52"
            },
            "scope": 14161,
            "src": "15357:317:52",
            "stateMutability": "nonpayable",
            "superFunction": 14271,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13866,
              "nodeType": "Block",
              "src": "16083:59:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13862,
                        "name": "_amountInWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13841,
                        "src": "16117:12:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13863,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13843,
                        "src": "16131:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13860,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "16100:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 13861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sendEther",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12588,
                      "src": "16100:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_payable_$returns$_t_bool_$",
                        "typeString": "function (uint256,address payable) external returns (bool)"
                      }
                    },
                    "id": 13864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16100:35:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13859,
                  "id": 13865,
                  "nodeType": "Return",
                  "src": "16093:42:52"
                }
              ]
            },
            "documentation": "@dev send some ether\n@param _amountInWei the amount of ether (in Wei) to send\n@param _to address of the beneficiary\n@return bool which represents a success",
            "id": 13867,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13848,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13847,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12874,
                  "src": "15963:20:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15963:20:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "73656e644574686572",
                    "id": 13850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "16012:11:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_c700fcf825bb96908bcfa40b8d91237381cd207a842fc67195330064c6f87772",
                      "typeString": "literal_string \"sendEther\""
                    },
                    "value": "sendEther"
                  }
                ],
                "id": 13851,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13849,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "15988:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15988:36:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13854,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13845,
                        "src": "16051:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 13853,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "16043:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16043:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 13856,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13852,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "16029:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16029:31:52"
              }
            ],
            "name": "sendEther",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13846,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13841,
                  "name": "_amountInWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 13867,
                  "src": "15887:20:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13840,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15887:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13843,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 13867,
                  "src": "15909:19:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 13842,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15909:15:52",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13845,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13867,
                  "src": "15930:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13844,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "15930:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15886:59:52"
            },
            "returnParameters": {
              "id": 13859,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13858,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13867,
                  "src": "16073:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13857,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16073:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16072:6:52"
            },
            "scope": 14161,
            "src": "15868:274:52",
            "stateMutability": "nonpayable",
            "superFunction": 14282,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13897,
              "nodeType": "Block",
              "src": "16674:81:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13892,
                        "name": "_externalToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13869,
                        "src": "16720:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$22137",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13893,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13871,
                        "src": "16736:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13894,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13873,
                        "src": "16741:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$22137",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13890,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "16691:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 13891,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "externalTokenTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12620,
                      "src": "16691:28:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$22137_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (contract IERC20,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 13895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16691:57:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13889,
                  "id": 13896,
                  "nodeType": "Return",
                  "src": "16684:64:52"
                }
              ]
            },
            "documentation": "@dev send some amount of arbitrary ERC20 Tokens\n@param _externalToken the address of the Token Contract\n@param _to address of the beneficiary\n@param _value the amount of ether (in Wei) to send\n@return bool which represents a success",
            "id": 13898,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13878,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13877,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12874,
                  "src": "16542:20:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16542:20:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "65787465726e616c546f6b656e5472616e73666572",
                    "id": 13880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "16591:23:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_7813035546e060c03dbe66bdee1941f9a0ad6551df13f617f14419ad20f4154f",
                      "typeString": "literal_string \"externalTokenTransfer\""
                    },
                    "value": "externalTokenTransfer"
                  }
                ],
                "id": 13881,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13879,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "16567:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16567:48:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13884,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13875,
                        "src": "16642:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 13883,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "16634:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13885,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16634:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 13886,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13882,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "16620:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16620:31:52"
              }
            ],
            "name": "externalTokenTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13869,
                  "name": "_externalToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 13898,
                  "src": "16457:21:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$22137",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13868,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22137,
                    "src": "16457:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$22137",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13871,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 13898,
                  "src": "16480:11:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13870,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16480:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13873,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 13898,
                  "src": "16493:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13872,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16493:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13875,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13898,
                  "src": "16509:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13874,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "16509:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16456:68:52"
            },
            "returnParameters": {
              "id": 13889,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13888,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13898,
                  "src": "16664:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13887,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16664:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16663:6:52"
            },
            "scope": 14161,
            "src": "16426:329:52",
            "stateMutability": "nonpayable",
            "superFunction": 14295,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13931,
              "nodeType": "Block",
              "src": "17537:92:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13925,
                        "name": "_externalToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13900,
                        "src": "17587:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$22137",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13926,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13902,
                        "src": "17603:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13927,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13904,
                        "src": "17610:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13928,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13906,
                        "src": "17615:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$22137",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13923,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "17554:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 13924,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "externalTokenTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12656,
                      "src": "17554:32:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$22137_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (contract IERC20,address,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 13929,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17554:68:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13922,
                  "id": 13930,
                  "nodeType": "Return",
                  "src": "17547:75:52"
                }
              ]
            },
            "documentation": "@dev transfer token \"from\" address \"to\" address\n     One must to approve the amount of tokens which can be spend from the\n     \"from\" account.This can be done using externalTokenApprove.\n@param _externalToken the address of the Token Contract\n@param _from address of the account to send from\n@param _to address of the beneficiary\n@param _value the amount of ether (in Wei) to send\n@return bool which represents a success",
            "id": 13932,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13911,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13910,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12874,
                  "src": "17401:20:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17401:20:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "65787465726e616c546f6b656e5472616e7366657246726f6d",
                    "id": 13913,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17450:27:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_ac07667e4f3fe9c6116bdfeed71f93079924e4156b3ee8a0c3180f10145562f3",
                      "typeString": "literal_string \"externalTokenTransferFrom\""
                    },
                    "value": "externalTokenTransferFrom"
                  }
                ],
                "id": 13914,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13912,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "17426:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17426:52:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13917,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13908,
                        "src": "17505:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 13916,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "17497:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17497:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 13919,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13915,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "17483:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17483:31:52"
              }
            ],
            "name": "externalTokenTransferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13909,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13900,
                  "name": "_externalToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 13932,
                  "src": "17285:21:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$22137",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13899,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22137,
                    "src": "17285:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$22137",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13902,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 13932,
                  "src": "17312:13:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13901,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17312:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13904,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 13932,
                  "src": "17331:11:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13903,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17331:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13906,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 13932,
                  "src": "17348:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13905,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17348:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13908,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13932,
                  "src": "17368:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13907,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "17368:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17279:104:52"
            },
            "returnParameters": {
              "id": 13922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13921,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13932,
                  "src": "17527:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13920,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17527:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17526:6:52"
            },
            "scope": 14161,
            "src": "17245:384:52",
            "stateMutability": "nonpayable",
            "superFunction": 14310,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13962,
              "nodeType": "Block",
              "src": "18269:86:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13957,
                        "name": "_externalToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13934,
                        "src": "18315:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$22137",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13958,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13936,
                        "src": "18331:8:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13959,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13938,
                        "src": "18341:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$22137",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13955,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "18286:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 13956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "externalTokenApproval",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12688,
                      "src": "18286:28:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$22137_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (contract IERC20,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 13960,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18286:62:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13954,
                  "id": 13961,
                  "nodeType": "Return",
                  "src": "18279:69:52"
                }
              ]
            },
            "documentation": "@dev externalTokenApproval approve the spender address to spend a specified amount of tokens\n     on behalf of msg.sender.\n@param _externalToken the address of the Token Contract\n@param _spender address\n@param _value the amount of ether (in Wei) which the approval is referring to.\n@return bool which represents a success",
            "id": 13963,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13943,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13942,
                  "name": "onlyRegisteredScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12874,
                  "src": "18129:20:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18129:20:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "65787465726e616c546f6b656e496e637265617365417070726f76616c",
                    "id": 13945,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "18178:31:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a6b5493ce06b69199b7c164b2fe8141dd5ecf7d2d491b28efc85f9c00fdfd15c",
                      "typeString": "literal_string \"externalTokenIncreaseApproval\""
                    },
                    "value": "externalTokenIncreaseApproval"
                  }
                ],
                "id": 13946,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13944,
                  "name": "onlySubjectToConstraint",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13047,
                  "src": "18154:23:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18154:56:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13949,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13940,
                        "src": "18237:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 13948,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "18229:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18229:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 13951,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13947,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "18215:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18215:31:52"
              }
            ],
            "name": "externalTokenApproval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13941,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13934,
                  "name": "_externalToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 13963,
                  "src": "18039:21:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$22137",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13933,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22137,
                    "src": "18039:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$22137",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13936,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 13963,
                  "src": "18062:16:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13935,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18062:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13938,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 13963,
                  "src": "18080:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13937,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18080:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13940,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13963,
                  "src": "18096:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13939,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "18096:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18038:73:52"
            },
            "returnParameters": {
              "id": 13954,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13953,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13963,
                  "src": "18259:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13952,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18259:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18258:6:52"
            },
            "scope": 14161,
            "src": "18008:347:52",
            "stateMutability": "nonpayable",
            "superFunction": 14323,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13984,
              "nodeType": "Block",
              "src": "18787:50:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13981,
                        "name": "_metaData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13965,
                        "src": "18820:9:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13979,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "18804:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 13980,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "metaData",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12704,
                      "src": "18804:15:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (string memory) external returns (bool)"
                      }
                    },
                    "id": 13982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18804:26:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13978,
                  "id": 13983,
                  "nodeType": "Return",
                  "src": "18797:33:52"
                }
              ]
            },
            "documentation": "@dev metaData emits an event with a string, should contain the hash of some meta data.\n@param _metaData a string representing a hash of the meta data\n@param _avatar Avatar\n@return bool which represents a success",
            "id": 13985,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 13970,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13969,
                  "name": "onlyMetaDataScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12974,
                  "src": "18698:18:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18698:18:52"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13973,
                        "name": "_avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13967,
                        "src": "18747:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "id": 13972,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "18739:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18739:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 13975,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13971,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "18725:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18725:31:52"
              }
            ],
            "name": "metaData",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13968,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13965,
                  "name": "_metaData",
                  "nodeType": "VariableDeclaration",
                  "scope": 13985,
                  "src": "18630:25:52",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 13964,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "18630:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13967,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 13985,
                  "src": "18657:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 13966,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "18657:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18629:43:52"
            },
            "returnParameters": {
              "id": 13978,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13977,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13985,
                  "src": "18773:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13976,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18773:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18772:6:52"
            },
            "scope": 14161,
            "src": "18612:225:52",
            "stateMutability": "nonpayable",
            "superFunction": 14332,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13999,
              "nodeType": "Block",
              "src": "19084:49:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13996,
                        "name": "nativeReputation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12737,
                        "src": "19109:16:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Reputation_$16423",
                          "typeString": "contract Reputation"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Reputation_$16423",
                          "typeString": "contract Reputation"
                        }
                      ],
                      "id": 13995,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "19101:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 13997,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19101:25:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 13994,
                  "id": 13998,
                  "nodeType": "Return",
                  "src": "19094:32:52"
                }
              ]
            },
            "documentation": "@dev getNativeReputation\n@param _avatar the organization avatar.\n@return organization native reputation",
            "id": 14000,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13990,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13987,
                    "src": "19053:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13991,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13989,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "19039:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19039:22:52"
              }
            ],
            "name": "getNativeReputation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13988,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13987,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 14000,
                  "src": "19013:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13986,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19013:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19012:17:52"
            },
            "returnParameters": {
              "id": 13994,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13993,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14000,
                  "src": "19075:7:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13992,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19075:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19074:9:52"
            },
            "scope": 14161,
            "src": "18984:149:52",
            "stateMutability": "view",
            "superFunction": 14339,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14016,
              "nodeType": "Block",
              "src": "19252:52:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14013,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14002,
                        "src": "19289:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14012,
                      "name": "_isSchemeRegistered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14160,
                      "src": "19269:19:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 14014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19269:28:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 14011,
                  "id": 14015,
                  "nodeType": "Return",
                  "src": "19262:35:52"
                }
              ]
            },
            "documentation": null,
            "id": 14017,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 14007,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14004,
                    "src": "19224:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 14008,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 14006,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "19210:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19210:22:52"
              }
            ],
            "name": "isSchemeRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14002,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 14017,
                  "src": "19167:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14001,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19167:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14004,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 14017,
                  "src": "19184:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14003,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19184:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19166:34:52"
            },
            "returnParameters": {
              "id": 14011,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14010,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14017,
                  "src": "19246:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14009,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19246:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19245:6:52"
            },
            "scope": 14161,
            "src": "19139:165:52",
            "stateMutability": "view",
            "superFunction": 14348,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14034,
              "nodeType": "Block",
              "src": "19447:51:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14029,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12731,
                        "src": "19464:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 14031,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 14030,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14019,
                        "src": "19472:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "19464:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "id": 14032,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "paramsHash",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12714,
                    "src": "19464:27:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 14028,
                  "id": 14033,
                  "nodeType": "Return",
                  "src": "19457:34:52"
                }
              ]
            },
            "documentation": null,
            "id": 14035,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 14024,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14021,
                    "src": "19404:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 14025,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 14023,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "19390:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19390:22:52"
              }
            ],
            "name": "getSchemeParameters",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14022,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14019,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 14035,
                  "src": "19339:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14018,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19339:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14021,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 14035,
                  "src": "19356:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14020,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19356:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19338:34:52"
            },
            "returnParameters": {
              "id": 14028,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14027,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14035,
                  "src": "19434:7:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14026,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19434:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19433:9:52"
            },
            "scope": 14161,
            "src": "19310:188:52",
            "stateMutability": "view",
            "superFunction": 14357,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14052,
              "nodeType": "Block",
              "src": "19641:52:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14047,
                        "name": "schemes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12731,
                        "src": "19658:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                          "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                        }
                      },
                      "id": 14049,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 14048,
                        "name": "_scheme",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14037,
                        "src": "19666:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "19658:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                        "typeString": "struct Controller.Scheme storage ref"
                      }
                    },
                    "id": 14050,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "permissions",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12716,
                    "src": "19658:28:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 14046,
                  "id": 14051,
                  "nodeType": "Return",
                  "src": "19651:35:52"
                }
              ]
            },
            "documentation": null,
            "id": 14053,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 14042,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14039,
                    "src": "19599:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 14043,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 14041,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "19585:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19585:22:52"
              }
            ],
            "name": "getSchemePermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14040,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14037,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 14053,
                  "src": "19534:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14036,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19534:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14039,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 14053,
                  "src": "19551:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14038,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19551:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19533:34:52"
            },
            "returnParameters": {
              "id": 14046,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14045,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14053,
                  "src": "19629:6:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 14044,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "19629:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19628:8:52"
            },
            "scope": 14161,
            "src": "19504:189:52",
            "stateMutability": "view",
            "superFunction": 14375,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14094,
              "nodeType": "Block",
              "src": "19805:403:52",
              "statements": [
                {
                  "assignments": [
                    14063
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14063,
                      "name": "register",
                      "nodeType": "VariableDeclaration",
                      "scope": 14094,
                      "src": "19816:40:52",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 14062,
                        "name": "GlobalConstraintRegister",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 12727,
                        "src": "19816:24:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage_ptr",
                          "typeString": "struct Controller.GlobalConstraintRegister"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14067,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 14064,
                      "name": "globalConstraintsRegisterPre",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12749,
                      "src": "19859:28:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                        "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                      }
                    },
                    "id": 14066,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 14065,
                      "name": "_globalConstraint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14055,
                      "src": "19888:17:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19859:47:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                      "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19816:90:52"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 14068,
                      "name": "register",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14063,
                      "src": "19921:8:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister memory"
                      }
                    },
                    "id": 14069,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isRegistered",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12724,
                    "src": "19921:21:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14077,
                  "nodeType": "IfStatement",
                  "src": "19917:102:52",
                  "trueBody": {
                    "id": 14076,
                    "nodeType": "Block",
                    "src": "19944:75:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 14070,
                              "name": "globalConstraintsPre",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12742,
                              "src": "19965:20:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                              }
                            },
                            "id": 14073,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 14071,
                                "name": "register",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14063,
                                "src": "19986:8:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                  "typeString": "struct Controller.GlobalConstraintRegister memory"
                                }
                              },
                              "id": 14072,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "index",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12726,
                              "src": "19986:14:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "19965:36:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                              "typeString": "struct Controller.GlobalConstraint storage ref"
                            }
                          },
                          "id": 14074,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "params",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12721,
                          "src": "19965:43:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 14061,
                        "id": 14075,
                        "nodeType": "Return",
                        "src": "19958:50:52"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14078,
                      "name": "register",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14063,
                      "src": "20029:8:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14079,
                        "name": "globalConstraintsRegisterPost",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12753,
                        "src": "20040:29:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                          "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                        }
                      },
                      "id": 14081,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 14080,
                        "name": "_globalConstraint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14055,
                        "src": "20070:17:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "20040:48:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                        "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                      }
                    },
                    "src": "20029:59:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                      "typeString": "struct Controller.GlobalConstraintRegister memory"
                    }
                  },
                  "id": 14083,
                  "nodeType": "ExpressionStatement",
                  "src": "20029:59:52"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 14084,
                      "name": "register",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14063,
                      "src": "20103:8:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                        "typeString": "struct Controller.GlobalConstraintRegister memory"
                      }
                    },
                    "id": 14085,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isRegistered",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12724,
                    "src": "20103:21:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14093,
                  "nodeType": "IfStatement",
                  "src": "20099:103:52",
                  "trueBody": {
                    "id": 14092,
                    "nodeType": "Block",
                    "src": "20126:76:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 14086,
                              "name": "globalConstraintsPost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12745,
                              "src": "20147:21:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                                "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                              }
                            },
                            "id": 14089,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 14087,
                                "name": "register",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14063,
                                "src": "20169:8:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_memory_ptr",
                                  "typeString": "struct Controller.GlobalConstraintRegister memory"
                                }
                              },
                              "id": 14088,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "index",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12726,
                              "src": "20169:14:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20147:37:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraint_$12722_storage",
                              "typeString": "struct Controller.GlobalConstraint storage ref"
                            }
                          },
                          "id": 14090,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "params",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12721,
                          "src": "20147:44:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 14061,
                        "id": 14091,
                        "nodeType": "Return",
                        "src": "20140:51:52"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 14095,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getGlobalConstraintParameters",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14058,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14055,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 14095,
                  "src": "19738:25:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14054,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19738:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14057,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14095,
                  "src": "19765:7:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14056,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19765:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19737:36:52"
            },
            "returnParameters": {
              "id": 14061,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14060,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14095,
                  "src": "19796:7:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14059,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19796:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19795:9:52"
            },
            "scope": 14161,
            "src": "19699:509:52",
            "stateMutability": "view",
            "superFunction": 14366,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14113,
              "nodeType": "Block",
              "src": "20557:83:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 14107,
                          "name": "globalConstraintsPre",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12742,
                          "src": "20575:20:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                          }
                        },
                        "id": 14108,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20575:27:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 14109,
                          "name": "globalConstraintsPost",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12745,
                          "src": "20604:21:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_GlobalConstraint_$12722_storage_$dyn_storage",
                            "typeString": "struct Controller.GlobalConstraint storage ref[] storage ref"
                          }
                        },
                        "id": 14110,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20604:28:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 14111,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "20574:59:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 14106,
                  "id": 14112,
                  "nodeType": "Return",
                  "src": "20567:66:52"
                }
              ]
            },
            "documentation": "@dev globalConstraintsCount return the global constraint pre and post count\n@return uint256 globalConstraintsPre count.\n@return uint256 globalConstraintsPost count.",
            "id": 14114,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 14100,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14097,
                    "src": "20499:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 14101,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 14099,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "20485:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20485:22:52"
              }
            ],
            "name": "globalConstraintsCount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14098,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14097,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 14114,
                  "src": "20443:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14096,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20443:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20442:17:52"
            },
            "returnParameters": {
              "id": 14106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14103,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14114,
                  "src": "20537:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14102,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "20537:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14105,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14114,
                  "src": "20543:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14104,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "20543:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20536:12:52"
            },
            "scope": 14161,
            "src": "20411:229:52",
            "stateMutability": "view",
            "superFunction": 14384,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14137,
              "nodeType": "Block",
              "src": "20819:167:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 14134,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 14126,
                              "name": "globalConstraintsRegisterPre",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12749,
                              "src": "20837:28:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 14128,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 14127,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14116,
                              "src": "20866:17:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20837:47:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "id": 14129,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12724,
                          "src": "20837:60:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 14130,
                              "name": "globalConstraintsRegisterPost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12753,
                              "src": "20917:29:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_GlobalConstraintRegister_$12727_storage_$",
                                "typeString": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                              }
                            },
                            "id": 14132,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 14131,
                              "name": "_globalConstraint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14116,
                              "src": "20947:17:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20917:48:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_GlobalConstraintRegister_$12727_storage",
                              "typeString": "struct Controller.GlobalConstraintRegister storage ref"
                            }
                          },
                          "id": 14133,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isRegistered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12724,
                          "src": "20917:61:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "20837:141:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 14135,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "20836:143:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 14125,
                  "id": 14136,
                  "nodeType": "Return",
                  "src": "20829:150:52"
                }
              ]
            },
            "documentation": null,
            "id": 14138,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 14121,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14118,
                    "src": "20767:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 14122,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 14120,
                  "name": "isAvatarValid",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13061,
                  "src": "20753:13:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20753:22:52"
              }
            ],
            "name": "isGlobalConstraintRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14119,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14116,
                  "name": "_globalConstraint",
                  "nodeType": "VariableDeclaration",
                  "scope": 14138,
                  "src": "20684:25:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14115,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20684:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14118,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 14138,
                  "src": "20711:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14117,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20711:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20683:44:52"
            },
            "returnParameters": {
              "id": 14125,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14124,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14138,
                  "src": "20805:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14123,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "20805:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20804:6:52"
            },
            "scope": 14161,
            "src": "20646:340:52",
            "stateMutability": "view",
            "superFunction": 14393,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14159,
              "nodeType": "Block",
              "src": "21065:86:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 14156,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 14152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 14145,
                                "name": "schemes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12731,
                                "src": "21083:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Scheme_$12717_storage_$",
                                  "typeString": "mapping(address => struct Controller.Scheme storage ref)"
                                }
                              },
                              "id": 14147,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 14146,
                                "name": "_scheme",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14140,
                                "src": "21091:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "21083:16:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Scheme_$12717_storage",
                                "typeString": "struct Controller.Scheme storage ref"
                              }
                            },
                            "id": 14148,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permissions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12716,
                            "src": "21083:28:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303031",
                                "id": 14150,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "21119:10:52",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "0x00000001"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "id": 14149,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21112:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 14151,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21112:18:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "21083:47:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 14154,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "21141:1:52",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 14153,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "21134:6:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": "bytes4"
                          },
                          "id": 14155,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21134:9:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "21083:60:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 14157,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "21082:62:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 14144,
                  "id": 14158,
                  "nodeType": "Return",
                  "src": "21075:69:52"
                }
              ]
            },
            "documentation": null,
            "id": 14160,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isSchemeRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14141,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14140,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 14160,
                  "src": "21021:15:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14139,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21021:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21020:17:52"
            },
            "returnParameters": {
              "id": 14144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14143,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14160,
                  "src": "21059:4:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14142,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21059:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21058:6:52"
            },
            "scope": 14161,
            "src": "20992:159:52",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 14162,
        "src": "410:20743:52"
      }
    ],
    "src": "0:21154:52"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.2",
  "updatedAt": "2021-08-23T07:33:52.393Z",
  "devdoc": {
    "details": "A controller controls the organizations tokens, reputation and avatar. It is subject to a set of schemes and constraints that determine its behavior. Each scheme has it own parameters and operation permissions.",
    "methods": {
      "addGlobalConstraint(address,bytes32,address)": {
        "details": "add or update Global Constraint",
        "params": {
          "_globalConstraint": "the address of the global constraint to be added.",
          "_params": "the constraint parameters hash."
        },
        "return": "bool which represents a success"
      },
      "burnReputation(uint256,address,address)": {
        "details": "Burns `_amount` of reputation from `_from`",
        "params": {
          "_amount": "amount of reputation to burn",
          "_from": "The address that will lose the reputation"
        },
        "return": "bool which represents a success"
      },
      "externalTokenApproval(address,address,uint256,address)": {
        "details": "externalTokenApproval approve the spender address to spend a specified amount of tokens     on behalf of msg.sender.",
        "params": {
          "_externalToken": "the address of the Token Contract",
          "_spender": "address",
          "_value": "the amount of ether (in Wei) which the approval is referring to."
        },
        "return": "bool which represents a success"
      },
      "externalTokenTransfer(address,address,uint256,address)": {
        "details": "send some amount of arbitrary ERC20 Tokens",
        "params": {
          "_externalToken": "the address of the Token Contract",
          "_to": "address of the beneficiary",
          "_value": "the amount of ether (in Wei) to send"
        },
        "return": "bool which represents a success"
      },
      "externalTokenTransferFrom(address,address,address,uint256,address)": {
        "details": "transfer token \"from\" address \"to\" address     One must to approve the amount of tokens which can be spend from the     \"from\" account.This can be done using externalTokenApprove.",
        "params": {
          "_externalToken": "the address of the Token Contract",
          "_from": "address of the account to send from",
          "_to": "address of the beneficiary",
          "_value": "the amount of ether (in Wei) to send"
        },
        "return": "bool which represents a success"
      },
      "genericCall(address,bytes,address,uint256)": {
        "details": "perform a generic call to an arbitrary contract",
        "params": {
          "_avatar": "the controller's avatar address",
          "_contract": "the contract's address to call",
          "_data": "ABI-encoded contract call to call `_contract` address.",
          "_value": "value (ETH) to transfer with the transaction"
        },
        "return": "bool -success        bytes  - the return value of the called _contract's function."
      },
      "getNativeReputation(address)": {
        "details": "getNativeReputation",
        "params": {
          "_avatar": "the organization avatar."
        },
        "return": "organization native reputation"
      },
      "globalConstraintsCount(address)": {
        "details": "globalConstraintsCount return the global constraint pre and post count",
        "return": "uint256 globalConstraintsPre count.uint256 globalConstraintsPost count."
      },
      "metaData(string,address)": {
        "details": "metaData emits an event with a string, should contain the hash of some meta data.",
        "params": {
          "_avatar": "Avatar",
          "_metaData": "a string representing a hash of the meta data"
        },
        "return": "bool which represents a success"
      },
      "mintReputation(uint256,address,address)": {
        "details": "Mint `_amount` of reputation that are assigned to `_to` .",
        "params": {
          "_amount": "amount of reputation to mint",
          "_to": "beneficiary address"
        },
        "return": "bool which represents a success"
      },
      "mintTokens(uint256,address,address)": {
        "details": "mint tokens .",
        "params": {
          "_amount": "amount of token to mint",
          "_beneficiary": "beneficiary address"
        },
        "return": "bool which represents a success"
      },
      "registerScheme(address,bytes32,bytes4,address)": {
        "details": "register a scheme",
        "params": {
          "_paramsHash": "a hashed configuration of the usage of the scheme",
          "_permissions": "the permissions the new scheme will have",
          "_scheme": "the address of the scheme"
        },
        "return": "bool which represents a success"
      },
      "removeGlobalConstraint(address,address)": {
        "details": "remove Global Constraint",
        "params": {
          "_globalConstraint": "the address of the global constraint to be remove."
        },
        "return": "bool which represents a success"
      },
      "sendEther(uint256,address,address)": {
        "details": "send some ether",
        "params": {
          "_amountInWei": "the amount of ether (in Wei) to send",
          "_to": "address of the beneficiary"
        },
        "return": "bool which represents a success"
      },
      "unregisterScheme(address,address)": {
        "details": "unregister a scheme",
        "params": {
          "_scheme": "the address of the scheme"
        },
        "return": "bool which represents a success"
      },
      "unregisterSelf(address)": {
        "details": "unregister the caller's scheme",
        "return": "bool which represents a success"
      },
      "upgradeController(address,address)": {
        "details": "upgrade the Controller     The function will trigger an event 'UpgradeController'.",
        "params": {
          "_newController": "the address of the new controller."
        },
        "return": "bool which represents a success"
      }
    },
    "title": "Controller contract"
  },
  "userdoc": {
    "methods": {}
  }
}