{
  "contractName": "GeneralPermissionManager",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "perms",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "takeFee",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "polyToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CHANGE_PERMISSION",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "securityToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "FEE_ADMIN",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "delegateDetails",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_securityToken",
          "type": "address"
        },
        {
          "name": "_polyAddress",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_delegate",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_module",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_perm",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_valid",
          "type": "bool"
        },
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "LogChangePermission",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_delegate",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_details",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "LogAddPermission",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInitFunction",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_delegate",
          "type": "address"
        },
        {
          "name": "_module",
          "type": "address"
        },
        {
          "name": "_perm",
          "type": "bytes32"
        }
      ],
      "name": "checkPermission",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_delegate",
          "type": "address"
        },
        {
          "name": "_details",
          "type": "bytes32"
        }
      ],
      "name": "addPermission",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_delegate",
          "type": "address"
        },
        {
          "name": "_module",
          "type": "address"
        },
        {
          "name": "_perm",
          "type": "bytes32"
        },
        {
          "name": "_valid",
          "type": "bool"
        }
      ],
      "name": "changePermission",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_delegate",
          "type": "address"
        }
      ],
      "name": "getDelegateDetails",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getPermissions",
      "outputs": [
        {
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50604051604080610d4883398101604052805160209091015160018054600160a060020a03938416600160a060020a0319918216179091556000805482163317905560028054939092169216919091179055610cd7806100716000396000f3006080604052600436106100b65763ffffffff60e060020a6000350416631613ec9d81146100bb5780634e0a4792146101055780635e1758fa146101435780635f7619a4146101695780636c5aaf50146101815780636faa22a5146101b45780637922c08a146101e55780638658b8b9146101fa578063b84dfbd214610224578063c3a07df614610239578063c45a01551461029e578063d70afa96146102b3578063dec7542f146102c8578063e380d343146102f7575b600080fd5b3480156100c757600080fd5b506100d0610318565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561011157600080fd5b5061012f600160a060020a036004358116906024351660443561031d565b604080519115158252519081900360200190f35b34801561014f57600080fd5b50610167600160a060020a0360043516602435610343565b005b34801561017557600080fd5b5061012f600435610551565b34801561018d57600080fd5b506101a2600160a060020a0360043516610890565b60408051918252519081900360200190f35b3480156101c057600080fd5b506101c96108ab565b60408051600160a060020a039092168252519081900360200190f35b3480156101f157600080fd5b506101a26108ba565b34801561020657600080fd5b5061012f600160a060020a03600435811690602435166044356108cc565b34801561023057600080fd5b506101c961092c565b34801561024557600080fd5b5061024e61093b565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561028a578181015183820152602001610272565b505050509050019250505060405180910390f35b3480156102aa57600080fd5b506101c961098d565b3480156102bf57600080fd5b506101a261099c565b3480156102d457600080fd5b5061012f600160a060020a036004358116906024351660443560643515156109c0565b34801561030357600080fd5b506101a2600160a060020a0360043516610c79565b600090565b600360209081526000938452604080852082529284528284209052825290205460ff1681565b600080516020610c8c833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156103a857600080fd5b505af11580156103bc573d6000803e3d6000fd5b505050506040513d60208110156103d257600080fd5b505160005433600160a060020a0392831681149450911614905081806103f55750805b8061049b5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561046e57600080fd5b505af1158015610482573d6000803e3d6000fd5b505050506040513d602081101561049857600080fd5b50515b15156104f1576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b600160a060020a038516600081815260046020908152604091829020879055815192835282018690524282820152517f7606544330055376fae1759a3d70de906caf98b81dc3bf7f2582af2ffcd4cfb49181900360600190a15050505050565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156105ca57600080fd5b505af11580156105de573d6000803e3d6000fd5b505050506040513d60208110156105f457600080fd5b505160005433600160a060020a0392831681149450911614905081806106175750805b806106bd5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561069057600080fd5b505af11580156106a4573d6000803e3d6000fd5b505050506040513d60208110156106ba57600080fd5b50515b1515610713576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b15801561078257600080fd5b505af1158015610796573d6000803e3d6000fd5b505050506040513d60208110156107ac57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b15801561080357600080fd5b505af1158015610817573d6000803e3d6000fd5b505050506040513d602081101561082d57600080fd5b50511515610885576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600160a060020a031660009081526004602052604090205490565b600254600160a060020a031681565b600080516020610c8c83398151915281565b600160a060020a038316600090815260046020526040812054156109215750600160a060020a03808316600090815260036020908152604080832093871683529281528282208483529052205460ff16610925565b5060005b9392505050565b600154600160a060020a031681565b60408051600180825281830190925260609182919060208083019080388339019050509050600080516020610c8c83398151915281600081518110151561097e57fe5b60209081029091010152905090565b600054600160a060020a031681565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b6000600080516020610c8c833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610a2757600080fd5b505af1158015610a3b573d6000803e3d6000fd5b505050506040513d6020811015610a5157600080fd5b505160005433600160a060020a039283168114945091161490508180610a745750805b80610b1a5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b505050506040513d6020811015610b1757600080fd5b50515b1515610b70576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b600160a060020a0388166000908152600460205260409020541515610bdf576040805160e560020a62461bcd02815260206004820152601860248201527f44656c65676174652064657461696c73206e6f74207365740000000000000000604482015290519081900360640190fd5b600160a060020a038088166000818152600360209081526040808320948d168084529482528083208b845282529182902080548a151560ff1990911681179091558251948552908401929092528281018990526060830191909152426080830152517fe7e0f6463adc815ed8a33c10555a87bdef40d69beb9fdd7e4e3e783c35bf958c9181900360a00190a1506001979650505050505050565b6004602052600090815260409020548156004348414e47455f5045524d495353494f4e000000000000000000000000000000a165627a7a72305820c3cab0fcbbc22bd687d85331cd53fa43ff15c3a2b42a466136954a3b1c7617d40029",
  "deployedBytecode": "0x6080604052600436106100b65763ffffffff60e060020a6000350416631613ec9d81146100bb5780634e0a4792146101055780635e1758fa146101435780635f7619a4146101695780636c5aaf50146101815780636faa22a5146101b45780637922c08a146101e55780638658b8b9146101fa578063b84dfbd214610224578063c3a07df614610239578063c45a01551461029e578063d70afa96146102b3578063dec7542f146102c8578063e380d343146102f7575b600080fd5b3480156100c757600080fd5b506100d0610318565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561011157600080fd5b5061012f600160a060020a036004358116906024351660443561031d565b604080519115158252519081900360200190f35b34801561014f57600080fd5b50610167600160a060020a0360043516602435610343565b005b34801561017557600080fd5b5061012f600435610551565b34801561018d57600080fd5b506101a2600160a060020a0360043516610890565b60408051918252519081900360200190f35b3480156101c057600080fd5b506101c96108ab565b60408051600160a060020a039092168252519081900360200190f35b3480156101f157600080fd5b506101a26108ba565b34801561020657600080fd5b5061012f600160a060020a03600435811690602435166044356108cc565b34801561023057600080fd5b506101c961092c565b34801561024557600080fd5b5061024e61093b565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561028a578181015183820152602001610272565b505050509050019250505060405180910390f35b3480156102aa57600080fd5b506101c961098d565b3480156102bf57600080fd5b506101a261099c565b3480156102d457600080fd5b5061012f600160a060020a036004358116906024351660443560643515156109c0565b34801561030357600080fd5b506101a2600160a060020a0360043516610c79565b600090565b600360209081526000938452604080852082529284528284209052825290205460ff1681565b600080516020610c8c833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156103a857600080fd5b505af11580156103bc573d6000803e3d6000fd5b505050506040513d60208110156103d257600080fd5b505160005433600160a060020a0392831681149450911614905081806103f55750805b8061049b5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561046e57600080fd5b505af1158015610482573d6000803e3d6000fd5b505050506040513d602081101561049857600080fd5b50515b15156104f1576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b600160a060020a038516600081815260046020908152604091829020879055815192835282018690524282820152517f7606544330055376fae1759a3d70de906caf98b81dc3bf7f2582af2ffcd4cfb49181900360600190a15050505050565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156105ca57600080fd5b505af11580156105de573d6000803e3d6000fd5b505050506040513d60208110156105f457600080fd5b505160005433600160a060020a0392831681149450911614905081806106175750805b806106bd5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561069057600080fd5b505af11580156106a4573d6000803e3d6000fd5b505050506040513d60208110156106ba57600080fd5b50515b1515610713576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b15801561078257600080fd5b505af1158015610796573d6000803e3d6000fd5b505050506040513d60208110156107ac57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b15801561080357600080fd5b505af1158015610817573d6000803e3d6000fd5b505050506040513d602081101561082d57600080fd5b50511515610885576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600160a060020a031660009081526004602052604090205490565b600254600160a060020a031681565b600080516020610c8c83398151915281565b600160a060020a038316600090815260046020526040812054156109215750600160a060020a03808316600090815260036020908152604080832093871683529281528282208483529052205460ff16610925565b5060005b9392505050565b600154600160a060020a031681565b60408051600180825281830190925260609182919060208083019080388339019050509050600080516020610c8c83398151915281600081518110151561097e57fe5b60209081029091010152905090565b600054600160a060020a031681565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b6000600080516020610c8c833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610a2757600080fd5b505af1158015610a3b573d6000803e3d6000fd5b505050506040513d6020811015610a5157600080fd5b505160005433600160a060020a039283168114945091161490508180610a745750805b80610b1a5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b505050506040513d6020811015610b1757600080fd5b50515b1515610b70576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b600160a060020a0388166000908152600460205260409020541515610bdf576040805160e560020a62461bcd02815260206004820152601860248201527f44656c65676174652064657461696c73206e6f74207365740000000000000000604482015290519081900360640190fd5b600160a060020a038088166000818152600360209081526040808320948d168084529482528083208b845282529182902080548a151560ff1990911681179091558251948552908401929092528281018990526060830191909152426080830152517fe7e0f6463adc815ed8a33c10555a87bdef40d69beb9fdd7e4e3e783c35bf958c9181900360a00190a1506001979650505050505050565b6004602052600090815260409020548156004348414e47455f5045524d495353494f4e000000000000000000000000000000a165627a7a72305820c3cab0fcbbc22bd687d85331cd53fa43ff15c3a2b42a466136954a3b1c7617d40029",
  "sourceMap": "367:3532:34:-;;;1164:119;8:9:-1;5:2;;;30:1;27;20:12;5:2;1164:119:34;;;;;;;;;;;;;;;;;;;624:13:13;:30;;-1:-1:-1;;;;;624:30:13;;;-1:-1:-1;;;;;;624:30:13;;;;;;;:13;664:20;;;;674:10;664:20;;;694:9;:31;;;;;;;;;;;;;;367:3532:34;;;;;;",
  "deployedSourceMap": "367:3532:34:-;;;;;;;;-1:-1:-1;367:3532:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1426:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1426:89:34;;;;;;;;;;;;;;;;;;;;;;;510:80;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;510:80:34;-1:-1:-1;;;;;510:80:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2269:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2269:206:34;;;-1:-1:-1;;;;;2269:206:34;;;;;;;1890:223:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1890:223:13;;;;;3434:126:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3434:126:34;;;-1:-1:-1;;;;;3434:126:34;;;;;;;;;;;;;;;;;;;365:22:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;365:22:13;;;;;;;;-1:-1:-1;;;;;365:22:13;;;;;;;;;;;;;;717:63:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;717:63:34;;;;1800:258;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1800:258:34;-1:-1:-1;;;;;1800:258:34;;;;;;;;;;;;276:28:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;276:28:13;;;;3694:202:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3694:202:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3694:202:34;;;;;;;;;;;;;;;;;247:22:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;247:22:13;;;;311:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;311:47:13;;;;2833:433:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2833:433:34;-1:-1:-1;;;;;2833:433:34;;;;;;;;;;;;;;;;637:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;637:51:34;;;-1:-1:-1;;;;;637:51:34;;;1426:89;1474:6;1426:89;:::o;510:80::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2269:206::-;-1:-1:-1;;;;;;;;;;;1029:13:13;;1014:37;;;-1:-1:-1;;;;;1014:37:13;;;;-1:-1:-1;;;;;;;;;1029:13:13;;;;1014:35;;:37;;;;;;;;;;;;;;;-1:-1:-1;1029:13:13;1014:37;;;5:2:-1;;;;30:1;27;20:12;5:2;1014:37:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1014:37:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1014:37:13;1092:7;;1000:10;-1:-1:-1;;;;;1000:51:13;;;;;;-1:-1:-1;1092:7:13;;1078:21;;-1:-1:-1;1000:51:13;;1117:18;;;1126:9;1117:18;:99;;;-1:-1:-1;1152:13:13;;1137:79;;;;;;1183:10;1137:79;;;;1203:4;1137:79;;;;;;;;;;;;-1:-1:-1;;;;;1152:13:13;;;;1137:45;;:79;;;;;;;;;;;;;;;-1:-1:-1;1152:13:13;1137:79;;;5:2:-1;;;;30:1;27;20:12;5:2;1137:79:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1137:79:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1137:79:13;1117:99;1109:135;;;;;;;-1:-1:-1;;;;;1109:135:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2374:26:34;;;;;;:15;:26;;;;;;;;;:37;;;2426:42;;;;;;;;;;2464:3;2426:42;;;;;;;;;;;;;;2269:206;;;;;:::o;1890:223:13:-;1029:13;;1014:37;;;-1:-1:-1;;;;;1014:37:13;;;;1959:4;;1940:9;;1959:4;;;;-1:-1:-1;;;;;1029:13:13;;1014:35;;:37;;;;;;;;;;;;;;1959:4;1029:13;1014:37;;;5:2:-1;;;;30:1;27;20:12;5:2;1014:37:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1014:37:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1014:37:13;1092:7;;1000:10;-1:-1:-1;;;;;1000:51:13;;;;;;-1:-1:-1;1092:7:13;;1078:21;;-1:-1:-1;1000:51:13;;1117:18;;;1126:9;1117:18;:99;;;-1:-1:-1;1152:13:13;;1137:79;;;;;;1183:10;1137:79;;;;1203:4;1137:79;;;;;;;;;;;;-1:-1:-1;;;;;1152:13:13;;;;1137:45;;:79;;;;;;;;;;;;;;;-1:-1:-1;1152:13:13;1137:79;;;5:2:-1;;;;30:1;27;20:12;5:2;1137:79:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1137:79:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1137:79:13;1117:99;1109:135;;;;;;;-1:-1:-1;;;;;1109:135:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;1983:9;;;2036:7;;2021:31;;;-1:-1:-1;;;;;2021:31:13;;;;-1:-1:-1;;;;;1983:9:13;;;;:22;;2014:4;;2036:7;;;;;2021:29;;:31;;;;;;;;;;;;;;;;2036:7;2021:31;;;5:2:-1;;;;30:1;27;20:12;5:2;2021:31:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2021:31:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2021:31:13;1983:79;;;;;;-1:-1:-1;1983:79:13;;;-1:-1:-1;;;;;1983:79:13;;;;;;;;;;;;;;;;;;;;;;;;;;;2021:31;;1983:79;;;;;;;-1:-1:-1;1983:79:13;;;;5:2:-1;;;;30:1;27;20:12;5:2;1983:79:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1983:79:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1983:79:13;1975:110;;;;;;;-1:-1:-1;;;;;1975:110:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2102:4:13;;1890:223;-1:-1:-1;;;;1890:223:13:o;3434:126:34:-;-1:-1:-1;;;;;3527:26:34;3501:7;3527:26;;;:15;:26;;;;;;;3434:126::o;365:22:13:-;;;-1:-1:-1;;;;;365:22:13;;:::o;717:63:34:-;-1:-1:-1;;;;;;;;;;;717:63:34;:::o;1800:258::-;-1:-1:-1;;;;;1916:26:34;;1896:4;1916:26;;;:15;:26;;;;;;:40;1912:139;;-1:-1:-1;;;;;;1979:14:34;;;;;;;:5;:14;;;;;;;;:25;;;;;;;;;;;:32;;;;;;;;;1972:39;;1912:139;-1:-1:-1;2046:5:34;1912:139;1800:258;;;;;:::o;276:28:13:-;;;-1:-1:-1;;;;;276:28:13;;:::o;3694:202:34:-;3795:16;;;3809:1;3795:16;;;;;;;;;3740:9;;;;3795:16;;;;;;;105:10:-1;3795:16:34;88:34:-1;136:17;;-1:-1;3795:16:34;3761:50;;-1:-1:-1;;;;;;;;;;;3821:14:34;3836:1;3821:17;;;;;;;;;;;;;;;;;;:37;3875:14;-1:-1:-1;3694:202:34;:::o;247:22:13:-;;;-1:-1:-1;;;;;247:22:13;;:::o;311:47::-;;;:::o;2833:433:34:-;3016:4;-1:-1:-1;;;;;;;;;;;1029:13:13;;1014:37;;;-1:-1:-1;;;;;1014:37:13;;;;-1:-1:-1;;;;;;;;;1029:13:13;;;;1014:35;;:37;;;;;;;;;;;;;;;-1:-1:-1;1029:13:13;1014:37;;;5:2:-1;;;;30:1;27;20:12;5:2;1014:37:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1014:37:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1014:37:13;1092:7;;1000:10;-1:-1:-1;;;;;1000:51:13;;;;;;-1:-1:-1;1092:7:13;;1078:21;;-1:-1:-1;1000:51:13;;1117:18;;;1126:9;1117:18;:99;;;-1:-1:-1;1152:13:13;;1137:79;;;;;;1183:10;1137:79;;;;1203:4;1137:79;;;;;;;;;;;;-1:-1:-1;;;;;1152:13:13;;;;1137:45;;:79;;;;;;;;;;;;;;;-1:-1:-1;1152:13:13;1137:79;;;5:2:-1;;;;30:1;27;20:12;5:2;1137:79:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1137:79:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1137:79:13;1117:99;1109:135;;;;;;;-1:-1:-1;;;;;1109:135:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3044:26:34;;3082:1;3044:26;;;:15;:26;;;;;;:40;;3036:77;;;;;-1:-1:-1;;;;;3036:77:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3123:14:34;;;;;;;:5;:14;;;;;;;;:25;;;;;;;;;;;;:32;;;;;;;;;:41;;-1:-1:-1;;3123:41:34;;;;;;;;;;3179:59;;;;;;;;;;;;;;;;;;;;;;;;;3234:3;3179:59;;;;;;;;;;-1:-1:-1;3179:59:34;;;-1:-1:-1;3255:4:34;;2833:433;-1:-1:-1;;;;;;;2833:433:34:o;637:51::-;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./IPermissionManager.sol\";\n\n/////////////////////\n// Module permissions\n/////////////////////\n//                          Owner       CHANGE_PERMISSION\n// addPermission              X               X\n// changePermission           X               X\n//\n\n/**\n * @title Permission Manager module for core permissioning functionality\n */\ncontract GeneralPermissionManager is IPermissionManager {\n\n    // Mapping used to hold the permissions on the modules provided to delegate\n    mapping (address => mapping (address => mapping (bytes32 => bool))) public perms;\n    // Mapping hold the delagate details\n    mapping (address => bytes32) public delegateDetails;\n    // Permission flag\n    bytes32 public constant CHANGE_PERMISSION = \"CHANGE_PERMISSION\";\n\n    /// Event emitted after any permission get changed for the delegate\n    event LogChangePermission(address _delegate, address _module, bytes32 _perm, bool _valid, uint256 _timestamp);\n    /// Use to notify when delegate is added in permission manager contract\n    event LogAddPermission(address _delegate, bytes32 _details, uint256 _timestamp);\n\n    /// @notice constructor\n    constructor (address _securityToken, address _polyAddress) public\n    IModule(_securityToken, _polyAddress)\n    {\n    }\n\n    /**\n    * @notice Init function i.e generalise function to maintain the structure of the module contract\n    * @return bytes4\n    */\n    function getInitFunction() public pure returns (bytes4) {\n        return bytes4(0);\n    }\n\n    /**\n    * @notice use to check the permission on delegate corresponds to module contract address\n    * @param _delegate Ethereum address of the delegate\n    * @param _module Ethereum contract address of the module\n    * @param _perm Permission flag\n    * @return bool\n    */\n    function checkPermission(address _delegate, address _module, bytes32 _perm) public view returns(bool) {\n        if (delegateDetails[_delegate] != bytes32(0)) {\n            return perms[_module][_delegate][_perm];\n        }else\n            return false;\n    }\n\n    /**\n    * @notice use to add the details of the delegate\n    * @param _delegate Ethereum address of the delegate\n    * @param _details Details about the delegate i.e `Belongs to financial firm`\n    */\n    function addPermission(address _delegate, bytes32 _details) public withPerm(CHANGE_PERMISSION) {\n        delegateDetails[_delegate] = _details;\n        emit LogAddPermission(_delegate, _details, now);\n    }\n\n  /**\n    * @notice Use to provide/change the permission to the delegate corresponds to the module contract\n    * @param _delegate Ethereum address of the delegate\n    * @param _module Ethereum contract address of the module\n    * @param _perm Permission flag\n    * @param _valid Bool flag use to switch on/off the permission\n    * @return bool\n    */\n    function changePermission(\n        address _delegate,\n        address _module,\n        bytes32 _perm,\n        bool _valid\n    )\n    public\n    withPerm(CHANGE_PERMISSION)\n    returns(bool)\n    {\n        require(delegateDetails[_delegate] != bytes32(0), \"Delegate details not set\");\n        perms[_module][_delegate][_perm] = _valid;\n        emit LogChangePermission(_delegate, _module, _perm, _valid, now);\n        return true;\n    }\n\n    /**\n    * @notice Use to get the details of the delegate\n    * @param _delegate Ethereum address of the delegate\n    * @return Details of the delegate\n    */\n    function getDelegateDetails(address _delegate) public view returns(bytes32) {\n        return delegateDetails[_delegate];\n    }\n\n    /**\n    * @notice Use to get the Permission flag related the `this` contract\n    * @return Array of permission flags\n    */\n    function getPermissions() public view returns(bytes32[]) {\n        bytes32[] memory allPermissions = new bytes32[](1);\n        allPermissions[0] = CHANGE_PERMISSION;\n        return allPermissions;\n    }\n\n}\n",
  "sourcePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/PermissionManager/GeneralPermissionManager.sol",
  "ast": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/PermissionManager/GeneralPermissionManager.sol",
    "exportedSymbols": {
      "GeneralPermissionManager": [
        13151
      ]
    },
    "id": 13152,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 12951,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:34"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/PermissionManager/IPermissionManager.sol",
        "file": "./IPermissionManager.sol",
        "id": 12952,
        "nodeType": "ImportDirective",
        "scope": 13152,
        "sourceUnit": 13325,
        "src": "26:34:34",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12953,
              "name": "IPermissionManager",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13324,
              "src": "404:18:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IPermissionManager_$13324",
                "typeString": "contract IPermissionManager"
              }
            },
            "id": 12954,
            "nodeType": "InheritanceSpecifier",
            "src": "404:18:34"
          }
        ],
        "contractDependencies": [
          9717,
          13324
        ],
        "contractKind": "contract",
        "documentation": "@title Permission Manager module for core permissioning functionality",
        "fullyImplemented": true,
        "id": 13151,
        "linearizedBaseContracts": [
          13151,
          13324,
          9717
        ],
        "name": "GeneralPermissionManager",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 12962,
            "name": "perms",
            "nodeType": "VariableDeclaration",
            "scope": 13151,
            "src": "510:80:34",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_bool_$_$_$",
              "typeString": "mapping(address => mapping(address => mapping(bytes32 => bool)))"
            },
            "typeName": {
              "id": 12961,
              "keyType": {
                "id": 12955,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "519:7:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "510:67:34",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_bool_$_$_$",
                "typeString": "mapping(address => mapping(address => mapping(bytes32 => bool)))"
              },
              "valueType": {
                "id": 12960,
                "keyType": {
                  "id": 12956,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "539:7:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "530:46:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_bool_$_$",
                  "typeString": "mapping(address => mapping(bytes32 => bool))"
                },
                "valueType": {
                  "id": 12959,
                  "keyType": {
                    "id": 12957,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "559:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "550:25:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                    "typeString": "mapping(bytes32 => bool)"
                  },
                  "valueType": {
                    "id": 12958,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "570:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  }
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12966,
            "name": "delegateDetails",
            "nodeType": "VariableDeclaration",
            "scope": 13151,
            "src": "637:51:34",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
              "typeString": "mapping(address => bytes32)"
            },
            "typeName": {
              "id": 12965,
              "keyType": {
                "id": 12963,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "646:7:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "637:28:34",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                "typeString": "mapping(address => bytes32)"
              },
              "valueType": {
                "id": 12964,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "657:7:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 12969,
            "name": "CHANGE_PERMISSION",
            "nodeType": "VariableDeclaration",
            "scope": 13151,
            "src": "717:63:34",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 12967,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "717:7:34",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "4348414e47455f5045524d495353494f4e",
              "id": 12968,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "761:19:34",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_3bd1c726b13346fa132010bc7b8defee313963cdd572a51fd2c36af1ca7e549e",
                "typeString": "literal_string \"CHANGE_PERMISSION\""
              },
              "value": "CHANGE_PERMISSION"
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": "Event emitted after any permission get changed for the delegate",
            "id": 12981,
            "name": "LogChangePermission",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12971,
                  "indexed": false,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 12981,
                  "src": "885:17:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12970,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "885:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12973,
                  "indexed": false,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 12981,
                  "src": "904:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12972,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "904:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12975,
                  "indexed": false,
                  "name": "_perm",
                  "nodeType": "VariableDeclaration",
                  "scope": 12981,
                  "src": "921:13:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12974,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "921:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12977,
                  "indexed": false,
                  "name": "_valid",
                  "nodeType": "VariableDeclaration",
                  "scope": 12981,
                  "src": "936:11:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12976,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "936:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12979,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 12981,
                  "src": "949:18:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12978,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "949:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "884:84:34"
            },
            "src": "859:110:34"
          },
          {
            "anonymous": false,
            "documentation": "Use to notify when delegate is added in permission manager contract",
            "id": 12989,
            "name": "LogAddPermission",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12988,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12983,
                  "indexed": false,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 12989,
                  "src": "1073:17:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12982,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1073:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12985,
                  "indexed": false,
                  "name": "_details",
                  "nodeType": "VariableDeclaration",
                  "scope": 12989,
                  "src": "1092:16:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12984,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1092:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12987,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 12989,
                  "src": "1110:18:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12986,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1110:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1072:57:34"
            },
            "src": "1050:80:34"
          },
          {
            "body": {
              "id": 13000,
              "nodeType": "Block",
              "src": "1276:7:34",
              "statements": []
            },
            "documentation": "@notice constructor",
            "id": 13001,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 12996,
                    "name": "_securityToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12991,
                    "src": "1242:14:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 12997,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12993,
                    "src": "1258:12:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 12998,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12995,
                  "name": "IModule",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9717,
                  "src": "1234:7:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModule_$9717_$",
                    "typeString": "type(contract IModule)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1234:37:34"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12994,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12991,
                  "name": "_securityToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 13001,
                  "src": "1177:22:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12990,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1177:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12993,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 13001,
                  "src": "1201:20:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12992,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1201:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1176:46:34"
            },
            "payable": false,
            "returnParameters": {
              "id": 12999,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1276:0:34"
            },
            "scope": 13151,
            "src": "1164:119:34",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13010,
              "nodeType": "Block",
              "src": "1482:33:34",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 13007,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1506:1:34",
                        "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": 13006,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1499:6:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes4_$",
                        "typeString": "type(bytes4)"
                      },
                      "typeName": "bytes4"
                    },
                    "id": 13008,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1499:9:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 13005,
                  "id": 13009,
                  "nodeType": "Return",
                  "src": "1492:16:34"
                }
              ]
            },
            "documentation": "@notice Init function i.e generalise function to maintain the structure of the module contract\n@return bytes4",
            "id": 13011,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInitFunction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13002,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1450:2:34"
            },
            "payable": false,
            "returnParameters": {
              "id": 13005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13004,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13011,
                  "src": "1474:6:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 13003,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "1474:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1473:8:34"
            },
            "scope": 13151,
            "src": "1426:89:34",
            "stateMutability": "pure",
            "superFunction": 9594,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13041,
              "nodeType": "Block",
              "src": "1902:156:34",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 13028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13022,
                        "name": "delegateDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12966,
                        "src": "1916:15:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 13024,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 13023,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13013,
                        "src": "1932:9:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1916:26:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 13026,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1954:1:34",
                          "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": 13025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1946:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": "bytes32"
                      },
                      "id": 13027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1946:10:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1916:40:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 13038,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2046:5:34",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "functionReturnParameters": 13021,
                    "id": 13039,
                    "nodeType": "Return",
                    "src": "2039:12:34"
                  },
                  "id": 13040,
                  "nodeType": "IfStatement",
                  "src": "1912:139:34",
                  "trueBody": {
                    "id": 13037,
                    "nodeType": "Block",
                    "src": "1958:64:34",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 13029,
                                "name": "perms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12962,
                                "src": "1979:5:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_bool_$_$_$",
                                  "typeString": "mapping(address => mapping(address => mapping(bytes32 => bool)))"
                                }
                              },
                              "id": 13031,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 13030,
                                "name": "_module",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13015,
                                "src": "1985:7:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1979:14:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_bool_$_$",
                                "typeString": "mapping(address => mapping(bytes32 => bool))"
                              }
                            },
                            "id": 13033,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 13032,
                              "name": "_delegate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13013,
                              "src": "1994:9:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1979:25:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                              "typeString": "mapping(bytes32 => bool)"
                            }
                          },
                          "id": 13035,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 13034,
                            "name": "_perm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13017,
                            "src": "2005:5:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1979:32:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 13021,
                        "id": 13036,
                        "nodeType": "Return",
                        "src": "1972:39:34"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice use to check the permission on delegate corresponds to module contract address\n@param _delegate Ethereum address of the delegate\n@param _module Ethereum contract address of the module\n@param _perm Permission flag\n@return bool",
            "id": 13042,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13018,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13013,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 13042,
                  "src": "1825:17:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13012,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1825:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13015,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 13042,
                  "src": "1844:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13014,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1844:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13017,
                  "name": "_perm",
                  "nodeType": "VariableDeclaration",
                  "scope": 13042,
                  "src": "1861:13:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13016,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1861:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1824:51:34"
            },
            "payable": false,
            "returnParameters": {
              "id": 13021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13020,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13042,
                  "src": "1896:4:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13019,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1896:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1895:6:34"
            },
            "scope": 13151,
            "src": "1800:258:34",
            "stateMutability": "view",
            "superFunction": 13303,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13064,
              "nodeType": "Block",
              "src": "2364:111:34",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13052,
                        "name": "delegateDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12966,
                        "src": "2374:15:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 13054,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 13053,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13044,
                        "src": "2390:9:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2374:26:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13055,
                      "name": "_details",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13046,
                      "src": "2403:8:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2374:37:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 13057,
                  "nodeType": "ExpressionStatement",
                  "src": "2374:37:34"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13059,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13044,
                        "src": "2443:9:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13060,
                        "name": "_details",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13046,
                        "src": "2454:8:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13061,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "2464:3:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13058,
                      "name": "LogAddPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12989,
                      "src": "2426:16:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes32,uint256)"
                      }
                    },
                    "id": 13062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2426:42:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13063,
                  "nodeType": "EmitStatement",
                  "src": "2421:47:34"
                }
              ]
            },
            "documentation": "@notice use to add the details of the delegate\n@param _delegate Ethereum address of the delegate\n@param _details Details about the delegate i.e `Belongs to financial firm`",
            "id": 13065,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13049,
                    "name": "CHANGE_PERMISSION",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12969,
                    "src": "2345:17:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 13050,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13048,
                  "name": "withPerm",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9637,
                  "src": "2336:8:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2336:27:34"
              }
            ],
            "name": "addPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13047,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13044,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 13065,
                  "src": "2292:17:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13043,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2292:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13046,
                  "name": "_details",
                  "nodeType": "VariableDeclaration",
                  "scope": 13065,
                  "src": "2311:16:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13045,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2311:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2291:37:34"
            },
            "payable": false,
            "returnParameters": {
              "id": 13051,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2364:0:34"
            },
            "scope": 13151,
            "src": "2269:206:34",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13112,
              "nodeType": "Block",
              "src": "3026:240:34",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 13088,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 13082,
                            "name": "delegateDetails",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12966,
                            "src": "3044:15:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 13084,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 13083,
                            "name": "_delegate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13067,
                            "src": "3060:9:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3044:26:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13086,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3082:1:34",
                              "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": 13085,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3074:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 13087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3074:10:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "3044:40:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "44656c65676174652064657461696c73206e6f7420736574",
                        "id": 13089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3086:26:34",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ee4f1c321b09f5295dd4330b362eb5c2c14a6bf4a2031dc6cfa979e66e4a821e",
                          "typeString": "literal_string \"Delegate details not set\""
                        },
                        "value": "Delegate details not set"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ee4f1c321b09f5295dd4330b362eb5c2c14a6bf4a2031dc6cfa979e66e4a821e",
                          "typeString": "literal_string \"Delegate details not set\""
                        }
                      ],
                      "id": 13081,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "3036:7:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13090,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3036:77:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13091,
                  "nodeType": "ExpressionStatement",
                  "src": "3036:77:34"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 13092,
                            "name": "perms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12962,
                            "src": "3123:5:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_bool_$_$_$",
                              "typeString": "mapping(address => mapping(address => mapping(bytes32 => bool)))"
                            }
                          },
                          "id": 13096,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 13093,
                            "name": "_module",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13069,
                            "src": "3129:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3123:14:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(bytes32 => bool))"
                          }
                        },
                        "id": 13097,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 13094,
                          "name": "_delegate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13067,
                          "src": "3138:9:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3123:25:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                          "typeString": "mapping(bytes32 => bool)"
                        }
                      },
                      "id": 13098,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 13095,
                        "name": "_perm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13071,
                        "src": "3149:5:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3123:32:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13099,
                      "name": "_valid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13073,
                      "src": "3158:6:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3123:41:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13101,
                  "nodeType": "ExpressionStatement",
                  "src": "3123:41:34"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13103,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13067,
                        "src": "3199:9:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13104,
                        "name": "_module",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13069,
                        "src": "3210:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13105,
                        "name": "_perm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13071,
                        "src": "3219:5:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13106,
                        "name": "_valid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13073,
                        "src": "3226:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13107,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "3234:3:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13102,
                      "name": "LogChangePermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12981,
                      "src": "3179:19:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bool_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,bytes32,bool,uint256)"
                      }
                    },
                    "id": 13108,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3179:59:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13109,
                  "nodeType": "EmitStatement",
                  "src": "3174:64:34"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 13110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3255:4:34",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 13080,
                  "id": 13111,
                  "nodeType": "Return",
                  "src": "3248:11:34"
                }
              ]
            },
            "documentation": "@notice Use to provide/change the permission to the delegate corresponds to the module contract\n@param _delegate Ethereum address of the delegate\n@param _module Ethereum contract address of the module\n@param _perm Permission flag\n@param _valid Bool flag use to switch on/off the permission\n@return bool",
            "id": 13113,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13076,
                    "name": "CHANGE_PERMISSION",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12969,
                    "src": "2985:17:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 13077,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13075,
                  "name": "withPerm",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9637,
                  "src": "2976:8:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2976:27:34"
              }
            ],
            "name": "changePermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13074,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13067,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 13113,
                  "src": "2868:17:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13066,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2868:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13069,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 13113,
                  "src": "2895:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13068,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2895:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13071,
                  "name": "_perm",
                  "nodeType": "VariableDeclaration",
                  "scope": 13113,
                  "src": "2920:13:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13070,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2920:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13073,
                  "name": "_valid",
                  "nodeType": "VariableDeclaration",
                  "scope": 13113,
                  "src": "2943:11:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13072,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2943:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2858:102:34"
            },
            "payable": false,
            "returnParameters": {
              "id": 13080,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13079,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13113,
                  "src": "3016:4:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13078,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3016:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3015:6:34"
            },
            "scope": 13151,
            "src": "2833:433:34",
            "stateMutability": "nonpayable",
            "superFunction": 13316,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13124,
              "nodeType": "Block",
              "src": "3510:50:34",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 13120,
                      "name": "delegateDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12966,
                      "src": "3527:15:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                        "typeString": "mapping(address => bytes32)"
                      }
                    },
                    "id": 13122,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 13121,
                      "name": "_delegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13115,
                      "src": "3543:9:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3527:26:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 13119,
                  "id": 13123,
                  "nodeType": "Return",
                  "src": "3520:33:34"
                }
              ]
            },
            "documentation": "@notice Use to get the details of the delegate\n@param _delegate Ethereum address of the delegate\n@return Details of the delegate",
            "id": 13125,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDelegateDetails",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13116,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13115,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 13125,
                  "src": "3462:17:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13114,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3462:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3461:19:34"
            },
            "payable": false,
            "returnParameters": {
              "id": 13119,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13118,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13125,
                  "src": "3501:7:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13117,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3501:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3500:9:34"
            },
            "scope": 13151,
            "src": "3434:126:34",
            "stateMutability": "view",
            "superFunction": 13323,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13149,
              "nodeType": "Block",
              "src": "3751:145:34",
              "statements": [
                {
                  "assignments": [
                    13134
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13134,
                      "name": "allPermissions",
                      "nodeType": "VariableDeclaration",
                      "scope": 13150,
                      "src": "3761:31:34",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13132,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3761:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 13133,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "3761:9:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13140,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 13138,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3809:1:34",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 13137,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "3795:13:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13135,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3799:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 13136,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "3799:9:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 13139,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3795:16:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3761:50:34"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13141,
                        "name": "allPermissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13134,
                        "src": "3821:14:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 13143,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 13142,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3836:1:34",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3821:17:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13144,
                      "name": "CHANGE_PERMISSION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12969,
                      "src": "3841:17:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3821:37:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 13146,
                  "nodeType": "ExpressionStatement",
                  "src": "3821:37:34"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13147,
                    "name": "allPermissions",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13134,
                    "src": "3875:14:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 13130,
                  "id": 13148,
                  "nodeType": "Return",
                  "src": "3868:21:34"
                }
              ]
            },
            "documentation": "@notice Use to get the Permission flag related the `this` contract\n@return Array of permission flags",
            "id": 13150,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13126,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3717:2:34"
            },
            "payable": false,
            "returnParameters": {
              "id": 13130,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13129,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13150,
                  "src": "3740:9:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13127,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "3740:7:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 13128,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3740:9:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3739:11:34"
            },
            "scope": 13151,
            "src": "3694:202:34",
            "stateMutability": "view",
            "superFunction": 9687,
            "visibility": "public"
          }
        ],
        "scope": 13152,
        "src": "367:3532:34"
      }
    ],
    "src": "0:3900:34"
  },
  "legacyAST": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/PermissionManager/GeneralPermissionManager.sol",
    "exportedSymbols": {
      "GeneralPermissionManager": [
        13151
      ]
    },
    "id": 13152,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 12951,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:34"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/PermissionManager/IPermissionManager.sol",
        "file": "./IPermissionManager.sol",
        "id": 12952,
        "nodeType": "ImportDirective",
        "scope": 13152,
        "sourceUnit": 13325,
        "src": "26:34:34",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12953,
              "name": "IPermissionManager",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13324,
              "src": "404:18:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IPermissionManager_$13324",
                "typeString": "contract IPermissionManager"
              }
            },
            "id": 12954,
            "nodeType": "InheritanceSpecifier",
            "src": "404:18:34"
          }
        ],
        "contractDependencies": [
          9717,
          13324
        ],
        "contractKind": "contract",
        "documentation": "@title Permission Manager module for core permissioning functionality",
        "fullyImplemented": true,
        "id": 13151,
        "linearizedBaseContracts": [
          13151,
          13324,
          9717
        ],
        "name": "GeneralPermissionManager",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 12962,
            "name": "perms",
            "nodeType": "VariableDeclaration",
            "scope": 13151,
            "src": "510:80:34",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_bool_$_$_$",
              "typeString": "mapping(address => mapping(address => mapping(bytes32 => bool)))"
            },
            "typeName": {
              "id": 12961,
              "keyType": {
                "id": 12955,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "519:7:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "510:67:34",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_bool_$_$_$",
                "typeString": "mapping(address => mapping(address => mapping(bytes32 => bool)))"
              },
              "valueType": {
                "id": 12960,
                "keyType": {
                  "id": 12956,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "539:7:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "530:46:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_bool_$_$",
                  "typeString": "mapping(address => mapping(bytes32 => bool))"
                },
                "valueType": {
                  "id": 12959,
                  "keyType": {
                    "id": 12957,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "559:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "550:25:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                    "typeString": "mapping(bytes32 => bool)"
                  },
                  "valueType": {
                    "id": 12958,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "570:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  }
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12966,
            "name": "delegateDetails",
            "nodeType": "VariableDeclaration",
            "scope": 13151,
            "src": "637:51:34",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
              "typeString": "mapping(address => bytes32)"
            },
            "typeName": {
              "id": 12965,
              "keyType": {
                "id": 12963,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "646:7:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "637:28:34",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                "typeString": "mapping(address => bytes32)"
              },
              "valueType": {
                "id": 12964,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "657:7:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 12969,
            "name": "CHANGE_PERMISSION",
            "nodeType": "VariableDeclaration",
            "scope": 13151,
            "src": "717:63:34",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 12967,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "717:7:34",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "4348414e47455f5045524d495353494f4e",
              "id": 12968,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "761:19:34",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_3bd1c726b13346fa132010bc7b8defee313963cdd572a51fd2c36af1ca7e549e",
                "typeString": "literal_string \"CHANGE_PERMISSION\""
              },
              "value": "CHANGE_PERMISSION"
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": "Event emitted after any permission get changed for the delegate",
            "id": 12981,
            "name": "LogChangePermission",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12971,
                  "indexed": false,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 12981,
                  "src": "885:17:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12970,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "885:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12973,
                  "indexed": false,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 12981,
                  "src": "904:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12972,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "904:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12975,
                  "indexed": false,
                  "name": "_perm",
                  "nodeType": "VariableDeclaration",
                  "scope": 12981,
                  "src": "921:13:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12974,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "921:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12977,
                  "indexed": false,
                  "name": "_valid",
                  "nodeType": "VariableDeclaration",
                  "scope": 12981,
                  "src": "936:11:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12976,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "936:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12979,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 12981,
                  "src": "949:18:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12978,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "949:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "884:84:34"
            },
            "src": "859:110:34"
          },
          {
            "anonymous": false,
            "documentation": "Use to notify when delegate is added in permission manager contract",
            "id": 12989,
            "name": "LogAddPermission",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12988,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12983,
                  "indexed": false,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 12989,
                  "src": "1073:17:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12982,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1073:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12985,
                  "indexed": false,
                  "name": "_details",
                  "nodeType": "VariableDeclaration",
                  "scope": 12989,
                  "src": "1092:16:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12984,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1092:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12987,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 12989,
                  "src": "1110:18:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12986,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1110:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1072:57:34"
            },
            "src": "1050:80:34"
          },
          {
            "body": {
              "id": 13000,
              "nodeType": "Block",
              "src": "1276:7:34",
              "statements": []
            },
            "documentation": "@notice constructor",
            "id": 13001,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 12996,
                    "name": "_securityToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12991,
                    "src": "1242:14:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 12997,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12993,
                    "src": "1258:12:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 12998,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12995,
                  "name": "IModule",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9717,
                  "src": "1234:7:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModule_$9717_$",
                    "typeString": "type(contract IModule)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1234:37:34"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12994,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12991,
                  "name": "_securityToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 13001,
                  "src": "1177:22:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12990,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1177:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12993,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 13001,
                  "src": "1201:20:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12992,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1201:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1176:46:34"
            },
            "payable": false,
            "returnParameters": {
              "id": 12999,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1276:0:34"
            },
            "scope": 13151,
            "src": "1164:119:34",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13010,
              "nodeType": "Block",
              "src": "1482:33:34",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 13007,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1506:1:34",
                        "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": 13006,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1499:6:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes4_$",
                        "typeString": "type(bytes4)"
                      },
                      "typeName": "bytes4"
                    },
                    "id": 13008,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1499:9:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 13005,
                  "id": 13009,
                  "nodeType": "Return",
                  "src": "1492:16:34"
                }
              ]
            },
            "documentation": "@notice Init function i.e generalise function to maintain the structure of the module contract\n@return bytes4",
            "id": 13011,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInitFunction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13002,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1450:2:34"
            },
            "payable": false,
            "returnParameters": {
              "id": 13005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13004,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13011,
                  "src": "1474:6:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 13003,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "1474:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1473:8:34"
            },
            "scope": 13151,
            "src": "1426:89:34",
            "stateMutability": "pure",
            "superFunction": 9594,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13041,
              "nodeType": "Block",
              "src": "1902:156:34",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 13028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13022,
                        "name": "delegateDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12966,
                        "src": "1916:15:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 13024,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 13023,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13013,
                        "src": "1932:9:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1916:26:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 13026,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1954:1:34",
                          "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": 13025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1946:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": "bytes32"
                      },
                      "id": 13027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1946:10:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1916:40:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 13038,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2046:5:34",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "functionReturnParameters": 13021,
                    "id": 13039,
                    "nodeType": "Return",
                    "src": "2039:12:34"
                  },
                  "id": 13040,
                  "nodeType": "IfStatement",
                  "src": "1912:139:34",
                  "trueBody": {
                    "id": 13037,
                    "nodeType": "Block",
                    "src": "1958:64:34",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 13029,
                                "name": "perms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12962,
                                "src": "1979:5:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_bool_$_$_$",
                                  "typeString": "mapping(address => mapping(address => mapping(bytes32 => bool)))"
                                }
                              },
                              "id": 13031,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 13030,
                                "name": "_module",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13015,
                                "src": "1985:7:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1979:14:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_bool_$_$",
                                "typeString": "mapping(address => mapping(bytes32 => bool))"
                              }
                            },
                            "id": 13033,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 13032,
                              "name": "_delegate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13013,
                              "src": "1994:9:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1979:25:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                              "typeString": "mapping(bytes32 => bool)"
                            }
                          },
                          "id": 13035,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 13034,
                            "name": "_perm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13017,
                            "src": "2005:5:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1979:32:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 13021,
                        "id": 13036,
                        "nodeType": "Return",
                        "src": "1972:39:34"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice use to check the permission on delegate corresponds to module contract address\n@param _delegate Ethereum address of the delegate\n@param _module Ethereum contract address of the module\n@param _perm Permission flag\n@return bool",
            "id": 13042,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13018,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13013,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 13042,
                  "src": "1825:17:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13012,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1825:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13015,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 13042,
                  "src": "1844:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13014,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1844:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13017,
                  "name": "_perm",
                  "nodeType": "VariableDeclaration",
                  "scope": 13042,
                  "src": "1861:13:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13016,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1861:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1824:51:34"
            },
            "payable": false,
            "returnParameters": {
              "id": 13021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13020,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13042,
                  "src": "1896:4:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13019,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1896:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1895:6:34"
            },
            "scope": 13151,
            "src": "1800:258:34",
            "stateMutability": "view",
            "superFunction": 13303,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13064,
              "nodeType": "Block",
              "src": "2364:111:34",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13052,
                        "name": "delegateDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12966,
                        "src": "2374:15:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 13054,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 13053,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13044,
                        "src": "2390:9:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2374:26:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13055,
                      "name": "_details",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13046,
                      "src": "2403:8:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2374:37:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 13057,
                  "nodeType": "ExpressionStatement",
                  "src": "2374:37:34"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13059,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13044,
                        "src": "2443:9:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13060,
                        "name": "_details",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13046,
                        "src": "2454:8:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13061,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "2464:3:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13058,
                      "name": "LogAddPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12989,
                      "src": "2426:16:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes32,uint256)"
                      }
                    },
                    "id": 13062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2426:42:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13063,
                  "nodeType": "EmitStatement",
                  "src": "2421:47:34"
                }
              ]
            },
            "documentation": "@notice use to add the details of the delegate\n@param _delegate Ethereum address of the delegate\n@param _details Details about the delegate i.e `Belongs to financial firm`",
            "id": 13065,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13049,
                    "name": "CHANGE_PERMISSION",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12969,
                    "src": "2345:17:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 13050,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13048,
                  "name": "withPerm",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9637,
                  "src": "2336:8:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2336:27:34"
              }
            ],
            "name": "addPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13047,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13044,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 13065,
                  "src": "2292:17:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13043,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2292:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13046,
                  "name": "_details",
                  "nodeType": "VariableDeclaration",
                  "scope": 13065,
                  "src": "2311:16:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13045,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2311:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2291:37:34"
            },
            "payable": false,
            "returnParameters": {
              "id": 13051,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2364:0:34"
            },
            "scope": 13151,
            "src": "2269:206:34",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13112,
              "nodeType": "Block",
              "src": "3026:240:34",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 13088,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 13082,
                            "name": "delegateDetails",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12966,
                            "src": "3044:15:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                              "typeString": "mapping(address => bytes32)"
                            }
                          },
                          "id": 13084,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 13083,
                            "name": "_delegate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13067,
                            "src": "3060:9:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3044:26:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13086,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3082:1:34",
                              "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": 13085,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3074:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 13087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3074:10:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "3044:40:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "44656c65676174652064657461696c73206e6f7420736574",
                        "id": 13089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3086:26:34",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ee4f1c321b09f5295dd4330b362eb5c2c14a6bf4a2031dc6cfa979e66e4a821e",
                          "typeString": "literal_string \"Delegate details not set\""
                        },
                        "value": "Delegate details not set"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ee4f1c321b09f5295dd4330b362eb5c2c14a6bf4a2031dc6cfa979e66e4a821e",
                          "typeString": "literal_string \"Delegate details not set\""
                        }
                      ],
                      "id": 13081,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "3036:7:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13090,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3036:77:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13091,
                  "nodeType": "ExpressionStatement",
                  "src": "3036:77:34"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 13092,
                            "name": "perms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12962,
                            "src": "3123:5:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_bool_$_$_$",
                              "typeString": "mapping(address => mapping(address => mapping(bytes32 => bool)))"
                            }
                          },
                          "id": 13096,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 13093,
                            "name": "_module",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13069,
                            "src": "3129:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3123:14:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(bytes32 => bool))"
                          }
                        },
                        "id": 13097,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 13094,
                          "name": "_delegate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13067,
                          "src": "3138:9:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3123:25:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                          "typeString": "mapping(bytes32 => bool)"
                        }
                      },
                      "id": 13098,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 13095,
                        "name": "_perm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13071,
                        "src": "3149:5:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3123:32:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13099,
                      "name": "_valid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13073,
                      "src": "3158:6:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3123:41:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13101,
                  "nodeType": "ExpressionStatement",
                  "src": "3123:41:34"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13103,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13067,
                        "src": "3199:9:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13104,
                        "name": "_module",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13069,
                        "src": "3210:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13105,
                        "name": "_perm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13071,
                        "src": "3219:5:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13106,
                        "name": "_valid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13073,
                        "src": "3226:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13107,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "3234:3:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13102,
                      "name": "LogChangePermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12981,
                      "src": "3179:19:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bool_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,bytes32,bool,uint256)"
                      }
                    },
                    "id": 13108,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3179:59:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13109,
                  "nodeType": "EmitStatement",
                  "src": "3174:64:34"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 13110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3255:4:34",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 13080,
                  "id": 13111,
                  "nodeType": "Return",
                  "src": "3248:11:34"
                }
              ]
            },
            "documentation": "@notice Use to provide/change the permission to the delegate corresponds to the module contract\n@param _delegate Ethereum address of the delegate\n@param _module Ethereum contract address of the module\n@param _perm Permission flag\n@param _valid Bool flag use to switch on/off the permission\n@return bool",
            "id": 13113,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13076,
                    "name": "CHANGE_PERMISSION",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12969,
                    "src": "2985:17:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 13077,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13075,
                  "name": "withPerm",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9637,
                  "src": "2976:8:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2976:27:34"
              }
            ],
            "name": "changePermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13074,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13067,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 13113,
                  "src": "2868:17:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13066,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2868:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13069,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 13113,
                  "src": "2895:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13068,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2895:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13071,
                  "name": "_perm",
                  "nodeType": "VariableDeclaration",
                  "scope": 13113,
                  "src": "2920:13:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13070,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2920:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13073,
                  "name": "_valid",
                  "nodeType": "VariableDeclaration",
                  "scope": 13113,
                  "src": "2943:11:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13072,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2943:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2858:102:34"
            },
            "payable": false,
            "returnParameters": {
              "id": 13080,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13079,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13113,
                  "src": "3016:4:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13078,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3016:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3015:6:34"
            },
            "scope": 13151,
            "src": "2833:433:34",
            "stateMutability": "nonpayable",
            "superFunction": 13316,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13124,
              "nodeType": "Block",
              "src": "3510:50:34",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 13120,
                      "name": "delegateDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12966,
                      "src": "3527:15:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                        "typeString": "mapping(address => bytes32)"
                      }
                    },
                    "id": 13122,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 13121,
                      "name": "_delegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13115,
                      "src": "3543:9:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3527:26:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 13119,
                  "id": 13123,
                  "nodeType": "Return",
                  "src": "3520:33:34"
                }
              ]
            },
            "documentation": "@notice Use to get the details of the delegate\n@param _delegate Ethereum address of the delegate\n@return Details of the delegate",
            "id": 13125,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDelegateDetails",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13116,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13115,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 13125,
                  "src": "3462:17:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13114,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3462:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3461:19:34"
            },
            "payable": false,
            "returnParameters": {
              "id": 13119,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13118,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13125,
                  "src": "3501:7:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13117,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3501:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3500:9:34"
            },
            "scope": 13151,
            "src": "3434:126:34",
            "stateMutability": "view",
            "superFunction": 13323,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13149,
              "nodeType": "Block",
              "src": "3751:145:34",
              "statements": [
                {
                  "assignments": [
                    13134
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13134,
                      "name": "allPermissions",
                      "nodeType": "VariableDeclaration",
                      "scope": 13150,
                      "src": "3761:31:34",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13132,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3761:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 13133,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "3761:9:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13140,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 13138,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3809:1:34",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 13137,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "3795:13:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13135,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3799:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 13136,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "3799:9:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 13139,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3795:16:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3761:50:34"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13141,
                        "name": "allPermissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13134,
                        "src": "3821:14:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 13143,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 13142,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3836:1:34",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3821:17:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13144,
                      "name": "CHANGE_PERMISSION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12969,
                      "src": "3841:17:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3821:37:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 13146,
                  "nodeType": "ExpressionStatement",
                  "src": "3821:37:34"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13147,
                    "name": "allPermissions",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13134,
                    "src": "3875:14:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 13130,
                  "id": 13148,
                  "nodeType": "Return",
                  "src": "3868:21:34"
                }
              ]
            },
            "documentation": "@notice Use to get the Permission flag related the `this` contract\n@return Array of permission flags",
            "id": 13150,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13126,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3717:2:34"
            },
            "payable": false,
            "returnParameters": {
              "id": 13130,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13129,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13150,
                  "src": "3740:9:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13127,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "3740:7:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 13128,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3740:9:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3739:11:34"
            },
            "scope": 13151,
            "src": "3694:202:34",
            "stateMutability": "view",
            "superFunction": 9687,
            "visibility": "public"
          }
        ],
        "scope": 13152,
        "src": "367:3532:34"
      }
    ],
    "src": "0:3900:34"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-08-21T09:48:12.456Z"
}