{
  "contractName": "ManualApprovalTransferManagerFactory",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "monthlySubscriptionCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newSubscriptionCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactorySubscriptionFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newSetupCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactorySetupFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "polyToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "setupCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newUsageCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactoryUsageFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "usageCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_polyAddress",
          "type": "address"
        },
        {
          "name": "_setupCost",
          "type": "uint256"
        },
        {
          "name": "_usageCost",
          "type": "uint256"
        },
        {
          "name": "_subscriptionCost",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldSetupcost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newSetupCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactorySetupFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldUsageCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newUsageCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactoryUsageFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldSubscriptionCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newMonthlySubscriptionCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactorySubscriptionFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_module",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_moduleName",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_moduleFactory",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_creator",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "LogGenerateModuleFromFactory",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipRenounced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "deploy",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getType",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getName",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getDescription",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTitle",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInstructions",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTags",
      "outputs": [
        {
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5060405160808061240a833981016040908152815160208301519183015160609093015160008054600160a060020a0319908116331790915560018054600160a060020a039094169390911692909217909155600291909155600391909155600455612389806100816000396000f3006080604052600436106100ef5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166277436081146100f457806306184a251461013057806315dae03e1461015757806317d7de7c146101825780631a092541146101975780633ae192bd1461022157806358a191c31461023b5780636faa22a514610253578063715018a6146102685780637e363ffa1461027d5780638da5cb5b14610292578063995d9ab7146102a7578063aac67b051461030c578063d54c472614610324578063e0d5497014610339578063f2fde38b1461034e578063ff3c1a8f1461036f575b600080fd5b34801561010057600080fd5b506101146004803560248101910135610384565b60408051600160a060020a039092168252519081900360200190f35b34801561013c57600080fd5b50610145610599565b60408051918252519081900360200190f35b34801561016357600080fd5b5061016c61059f565b6040805160ff9092168252519081900360200190f35b34801561018e57600080fd5b506101456105a4565b3480156101a357600080fd5b506101ac6105c8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101e65781810151838201526020016101ce565b50505050905090810190601f1680156102135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022d57600080fd5b50610239600435610627565b005b34801561024757600080fd5b50610239600435610684565b34801561025f57600080fd5b506101146106e1565b34801561027457600080fd5b506102396106f0565b34801561028957600080fd5b5061014561075c565b34801561029e57600080fd5b50610114610762565b3480156102b357600080fd5b506102bc610771565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102f85781810151838201526020016102e0565b505050509050019250505060405180910390f35b34801561031857600080fd5b5061023960043561080f565b34801561033057600080fd5b5061014561086c565b34801561034557600080fd5b506101ac610872565b34801561035a57600080fd5b50610239600160a060020a0360043516610893565b34801561037b57600080fd5b506101ac6108b6565b600080600060025411156104f65760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b15801561041157600080fd5b505af1158015610425573d6000803e3d6000fd5b505050506040513d602081101561043b57600080fd5b505115156104f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a031661050c61096a565b600160a060020a03928316815291166020820152604080519182900301906000f08015801561053f573d6000803e3d6000fd5b5090503061054b6105a4565b60408051600160a060020a0385168152336020820152428183015290517f1b81ebef84f1d2411caa47894fb587822eff7c2a8a3580a2d52ce516f840c8219181900360600190a39392505050565b60045481565b600290565b7f4d616e75616c417070726f76616c5472616e736665724d616e6167657200000090565b60408051606081018252603281527f4d616e616765207472616e7366657273207573696e672073696e676c6520617060208201527f70726f76616c73202f20626c6f636b696e6700000000000000000000000000009181019190915290565b600054600160a060020a0316331461063e57600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a0316331461069b57600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a0316331461070757600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b6040805160028082526060808301845292839291906020830190803883390190505090507f4d616e75616c417070726f76616c0000000000000000000000000000000000008160008151811015156107c557fe5b6020908102909101015280517f5472616e73666572205265737472696374696f6e000000000000000000000000908290600190811061080057fe5b60209081029091010152905090565b600054600160a060020a0316331461082657600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b606060c060405190810160405280608281526020016122dc60829139905090565b600054600160a060020a031633146108aa57600080fd5b6108b3816108ed565b50565b6040805180820190915260208082527f4d616e75616c20417070726f76616c205472616e73666572204d616e616765729082015290565b600160a060020a038116151561090257600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6040516119618061097b83390190560060806040526002805460a060020a60ff021916905560038054600160a060020a031990811690915560048054909116905534801561003c57600080fd5b5060405160408061196183398101604052805160209091015160018054600160a060020a03938416600160a060020a03199182161790915560008054821633179055600280549390921692169190911790556118c48061009d6000396000f3006080604052600436106100f85763ffffffff60e060020a6000350416631613ec9d81146100fd57806339d04b6c146101475780633f4ba83a1461017657806340bb79851461018b5780635c975abb146101c45780635f7619a4146101ed5780636faa22a51461020557806370aad962146102365780637915c9e0146102605780637dc32b0b146102b35780638456cb59146102da578063889b2cc3146102ef5780639f7cd0ef1461032f578063b3e82dc914610344578063b3fac8ce14610359578063b84dfbd21461036e578063c3a07df614610383578063c45a0155146103e8578063d70afa96146103fd578063ed9d787314610412575b600080fd5b34801561010957600080fd5b50610112610439565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561015357600080fd5b50610174600160a060020a036004358116906024351660443560643561043e565b005b34801561018257600080fd5b50610174610751565b34801561019757600080fd5b506101b2600160a060020a0360043581169060243516610839565b60408051918252519081900360200190f35b3480156101d057600080fd5b506101d9610856565b604080519115158252519081900360200190f35b3480156101f957600080fd5b506101d9600435610866565b34801561021157600080fd5b5061021a610b7d565b60408051600160a060020a039092168252519081900360200190f35b34801561024257600080fd5b50610174600160a060020a0360043581169060243516604435610b8c565b34801561026c57600080fd5b5061028f600160a060020a03600435811690602435166044356064351515610e84565b6040518082600381111561029f57fe5b60ff16815260200191505060405180910390f35b3480156102bf57600080fd5b50610174600160a060020a0360043581169060243516610f9f565b3480156102e657600080fd5b50610174611236565b3480156102fb57600080fd5b50610316600160a060020a036004358116906024351661131c565b6040805192835260208301919091528051918290030190f35b34801561033b57600080fd5b506101b2611340565b34801561035057600080fd5b5061021a611352565b34801561036557600080fd5b5061021a611361565b34801561037a57600080fd5b5061021a611370565b34801561038f57600080fd5b5061039861137f565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103d45781810151838201526020016103bc565b505050509050019250505060405180910390f35b3480156103f457600080fd5b5061021a6113d1565b34801561040957600080fd5b506101b26113e0565b34801561041e57600080fd5b50610174600160a060020a0360043581169060243516611404565b600090565b600080516020611859833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156104a357600080fd5b505af11580156104b7573d6000803e3d6000fd5b505050506040513d60208110156104cd57600080fd5b505160005433600160a060020a0392831681149450911614905081806104f05750805b8061058057506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561055357600080fd5b505af1158015610567573d6000803e3d6000fd5b505050506040513d602081101561057d57600080fd5b50515b15156105c4576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611879833981519152604482015290519081900360640190fd5b600160a060020a0387161515610612576040805160e560020a62461bcd0281526020600482015260146024820152600080516020611819833981519152604482015290519081900360640190fd5b600160a060020a0386161515610660576040805160e560020a62461bcd0281526020600482015260126024820152600080516020611839833981519152604482015290519081900360640190fd5b4284116106b7576040805160e560020a62461bcd02815260206004820152601360248201527f496e76616c6964206578706972792074696d6500000000000000000000000000604482015290519081900360640190fd5b6040805180820182528681526020808201878152600160a060020a03808c16600081815260058552868120928d168082529285528690209451855591516001909401939093558351908152908101919091528082018790526060810186905233608082015290517f90ee15f89c9a607f731c9e21490aa4fb787765ca244780c4cf14e60b6982fd6b9181900360a00190a150505050505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156107a457600080fd5b505af11580156107b8573d6000803e3d6000fd5b505050506040513d60208110156107ce57600080fd5b5051600160a060020a0316331461082f576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b610837611695565b565b600660209081526000928352604080842090915290825290205481565b60025460a060020a900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156108df57600080fd5b505af11580156108f3573d6000803e3d6000fd5b505050506040513d602081101561090957600080fd5b505160005433600160a060020a03928316811494509116149050818061092c5750805b806109bc57506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561098f57600080fd5b505af11580156109a3573d6000803e3d6000fd5b505050506040513d60208110156109b957600080fd5b50515b1515610a00576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611879833981519152604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610a6f57600080fd5b505af1158015610a83573d6000803e3d6000fd5b505050506040513d6020811015610a9957600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610af057600080fd5b505af1158015610b04573d6000803e3d6000fd5b505050506040513d6020811015610b1a57600080fd5b50511515610b72576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600254600160a060020a031681565b600080516020611859833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610bf157600080fd5b505af1158015610c05573d6000803e3d6000fd5b505050506040513d6020811015610c1b57600080fd5b505160005433600160a060020a039283168114945091161490508180610c3e5750805b80610cce57506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610ca157600080fd5b505af1158015610cb5573d6000803e3d6000fd5b505050506040513d6020811015610ccb57600080fd5b50515b1515610d12576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611879833981519152604482015290519081900360640190fd5b600160a060020a0386161515610d60576040805160e560020a62461bcd0281526020600482015260146024820152600080516020611819833981519152604482015290519081900360640190fd5b600160a060020a0385161515610dae576040805160e560020a62461bcd0281526020600482015260126024820152600080516020611839833981519152604482015290519081900360640190fd5b428411610e05576040805160e560020a62461bcd02815260206004820152601360248201527f496e76616c6964206578706972792074696d6500000000000000000000000000604482015290519081900360640190fd5b6040805160208181018352868252600160a060020a03808a16600081815260068452858120928b16808252928452859020935190935583519283529082015280820186905233606082015290517f025175e118727e402afd2852f5b550d8c3dd87e2d53f7315e978b815bbd31d189181900360800190a1505050505050565b60025460009060a060020a900460ff161515610b7257600160a060020a038086166000908152600660209081526040808320938816835292905220544211610ece57506000610f97565b600160a060020a038086166000908152600560209081526040808320938816835292905220600101544211801590610f2b5750600160a060020a038086166000908152600560209081526040808320938816835292905220548311155b15610b72578115610f9357600160a060020a03808616600090815260056020908152604080832093881683529290522054610f6c908463ffffffff61174b16565b600160a060020a038087166000908152600560209081526040808320938916835292905220555b5060025b949350505050565b600080516020611859833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561100457600080fd5b505af1158015611018573d6000803e3d6000fd5b505050506040513d602081101561102e57600080fd5b505160005433600160a060020a0392831681149450911614905081806110515750805b806110e157506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156110b457600080fd5b505af11580156110c8573d6000803e3d6000fd5b505050506040513d60208110156110de57600080fd5b50515b1515611125576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611879833981519152604482015290519081900360640190fd5b600160a060020a0385161515611173576040805160e560020a62461bcd0281526020600482015260146024820152600080516020611819833981519152604482015290519081900360640190fd5b600160a060020a03841615156111c1576040805160e560020a62461bcd0281526020600482015260126024820152600080516020611839833981519152604482015290519081900360640190fd5b600160a060020a038086166000818152600560209081526040808320948916808452948252808320838155600101929092558151928352820192909252338183015290517f9b2aceb68830f5eb0ad13b4e30560c85439547deab0060ce984aae641d34b0069181900360600190a15050505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561128957600080fd5b505af115801561129d573d6000803e3d6000fd5b505050506040513d60208110156112b357600080fd5b5051600160a060020a03163314611314576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b61083761175d565b60056020908152600092835260408084209091529082529020805460019091015482565b60008051602061185983398151915281565b600454600160a060020a031681565b600354600160a060020a031681565b600154600160a060020a031681565b604080516001808252818301909252606091829190602080830190803883390190505090506000805160206118598339815191528160008151811015156113c257fe5b60209081029091010152905090565b600054600160a060020a031681565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b600080516020611859833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561146957600080fd5b505af115801561147d573d6000803e3d6000fd5b505050506040513d602081101561149357600080fd5b505160005433600160a060020a0392831681149450911614905081806114b65750805b8061154657506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561151957600080fd5b505af115801561152d573d6000803e3d6000fd5b505050506040513d602081101561154357600080fd5b50515b151561158a576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611879833981519152604482015290519081900360640190fd5b600160a060020a03851615156115d8576040805160e560020a62461bcd0281526020600482015260146024820152600080516020611819833981519152604482015290519081900360640190fd5b600160a060020a0384161515611626576040805160e560020a62461bcd0281526020600482015260126024820152600080516020611839833981519152604482015290519081900360640190fd5b600160a060020a038086166000818152600660209081526040808320948916808452948252808320929092558151928352820192909252338183015290517f1032078cb6646bf29e5931e893a691532173df464fbddfbe03d8f2da71c643bd9181900360600190a15050505050565b60025460a060020a900460ff1615156116f8576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b60008282111561175757fe5b50900390565b60025460a060020a900460ff16156117bf576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a15600496e76616c69642066726f6d2061646472657373000000000000000000000000496e76616c696420746f206164647265737300000000000000000000000000005452414e534645525f415050524f56414c0000000000000000000000000000005065726d697373696f6e20636865636b206661696c6564000000000000000000a165627a7a723058203673092b8469ad061dd200d9feb726a74d1d166347b372572a043fe78a242b000029416c6c6f777320616e2069737375657220746f20736574206d616e75616c20617070726f76616c73206f7220626c6f636b7320666f72207370656369666963207061697273206f662061646472657373657320616e6420616d6f756e74732e20496e69742066756e6374696f6e2074616b6573206e6f20706172616d65746572732ea165627a7a72305820b833dfe0b957bc3eeb6b8830ed7a2f0ae9abae0c78f79c4a40d5bb7390f9256b0029",
  "deployedBytecode": "0x6080604052600436106100ef5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166277436081146100f457806306184a251461013057806315dae03e1461015757806317d7de7c146101825780631a092541146101975780633ae192bd1461022157806358a191c31461023b5780636faa22a514610253578063715018a6146102685780637e363ffa1461027d5780638da5cb5b14610292578063995d9ab7146102a7578063aac67b051461030c578063d54c472614610324578063e0d5497014610339578063f2fde38b1461034e578063ff3c1a8f1461036f575b600080fd5b34801561010057600080fd5b506101146004803560248101910135610384565b60408051600160a060020a039092168252519081900360200190f35b34801561013c57600080fd5b50610145610599565b60408051918252519081900360200190f35b34801561016357600080fd5b5061016c61059f565b6040805160ff9092168252519081900360200190f35b34801561018e57600080fd5b506101456105a4565b3480156101a357600080fd5b506101ac6105c8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101e65781810151838201526020016101ce565b50505050905090810190601f1680156102135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022d57600080fd5b50610239600435610627565b005b34801561024757600080fd5b50610239600435610684565b34801561025f57600080fd5b506101146106e1565b34801561027457600080fd5b506102396106f0565b34801561028957600080fd5b5061014561075c565b34801561029e57600080fd5b50610114610762565b3480156102b357600080fd5b506102bc610771565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102f85781810151838201526020016102e0565b505050509050019250505060405180910390f35b34801561031857600080fd5b5061023960043561080f565b34801561033057600080fd5b5061014561086c565b34801561034557600080fd5b506101ac610872565b34801561035a57600080fd5b50610239600160a060020a0360043516610893565b34801561037b57600080fd5b506101ac6108b6565b600080600060025411156104f65760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b15801561041157600080fd5b505af1158015610425573d6000803e3d6000fd5b505050506040513d602081101561043b57600080fd5b505115156104f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a031661050c61096a565b600160a060020a03928316815291166020820152604080519182900301906000f08015801561053f573d6000803e3d6000fd5b5090503061054b6105a4565b60408051600160a060020a0385168152336020820152428183015290517f1b81ebef84f1d2411caa47894fb587822eff7c2a8a3580a2d52ce516f840c8219181900360600190a39392505050565b60045481565b600290565b7f4d616e75616c417070726f76616c5472616e736665724d616e6167657200000090565b60408051606081018252603281527f4d616e616765207472616e7366657273207573696e672073696e676c6520617060208201527f70726f76616c73202f20626c6f636b696e6700000000000000000000000000009181019190915290565b600054600160a060020a0316331461063e57600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a0316331461069b57600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a0316331461070757600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b6040805160028082526060808301845292839291906020830190803883390190505090507f4d616e75616c417070726f76616c0000000000000000000000000000000000008160008151811015156107c557fe5b6020908102909101015280517f5472616e73666572205265737472696374696f6e000000000000000000000000908290600190811061080057fe5b60209081029091010152905090565b600054600160a060020a0316331461082657600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b606060c060405190810160405280608281526020016122dc60829139905090565b600054600160a060020a031633146108aa57600080fd5b6108b3816108ed565b50565b6040805180820190915260208082527f4d616e75616c20417070726f76616c205472616e73666572204d616e616765729082015290565b600160a060020a038116151561090257600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6040516119618061097b83390190560060806040526002805460a060020a60ff021916905560038054600160a060020a031990811690915560048054909116905534801561003c57600080fd5b5060405160408061196183398101604052805160209091015160018054600160a060020a03938416600160a060020a03199182161790915560008054821633179055600280549390921692169190911790556118c48061009d6000396000f3006080604052600436106100f85763ffffffff60e060020a6000350416631613ec9d81146100fd57806339d04b6c146101475780633f4ba83a1461017657806340bb79851461018b5780635c975abb146101c45780635f7619a4146101ed5780636faa22a51461020557806370aad962146102365780637915c9e0146102605780637dc32b0b146102b35780638456cb59146102da578063889b2cc3146102ef5780639f7cd0ef1461032f578063b3e82dc914610344578063b3fac8ce14610359578063b84dfbd21461036e578063c3a07df614610383578063c45a0155146103e8578063d70afa96146103fd578063ed9d787314610412575b600080fd5b34801561010957600080fd5b50610112610439565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561015357600080fd5b50610174600160a060020a036004358116906024351660443560643561043e565b005b34801561018257600080fd5b50610174610751565b34801561019757600080fd5b506101b2600160a060020a0360043581169060243516610839565b60408051918252519081900360200190f35b3480156101d057600080fd5b506101d9610856565b604080519115158252519081900360200190f35b3480156101f957600080fd5b506101d9600435610866565b34801561021157600080fd5b5061021a610b7d565b60408051600160a060020a039092168252519081900360200190f35b34801561024257600080fd5b50610174600160a060020a0360043581169060243516604435610b8c565b34801561026c57600080fd5b5061028f600160a060020a03600435811690602435166044356064351515610e84565b6040518082600381111561029f57fe5b60ff16815260200191505060405180910390f35b3480156102bf57600080fd5b50610174600160a060020a0360043581169060243516610f9f565b3480156102e657600080fd5b50610174611236565b3480156102fb57600080fd5b50610316600160a060020a036004358116906024351661131c565b6040805192835260208301919091528051918290030190f35b34801561033b57600080fd5b506101b2611340565b34801561035057600080fd5b5061021a611352565b34801561036557600080fd5b5061021a611361565b34801561037a57600080fd5b5061021a611370565b34801561038f57600080fd5b5061039861137f565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103d45781810151838201526020016103bc565b505050509050019250505060405180910390f35b3480156103f457600080fd5b5061021a6113d1565b34801561040957600080fd5b506101b26113e0565b34801561041e57600080fd5b50610174600160a060020a0360043581169060243516611404565b600090565b600080516020611859833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156104a357600080fd5b505af11580156104b7573d6000803e3d6000fd5b505050506040513d60208110156104cd57600080fd5b505160005433600160a060020a0392831681149450911614905081806104f05750805b8061058057506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561055357600080fd5b505af1158015610567573d6000803e3d6000fd5b505050506040513d602081101561057d57600080fd5b50515b15156105c4576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611879833981519152604482015290519081900360640190fd5b600160a060020a0387161515610612576040805160e560020a62461bcd0281526020600482015260146024820152600080516020611819833981519152604482015290519081900360640190fd5b600160a060020a0386161515610660576040805160e560020a62461bcd0281526020600482015260126024820152600080516020611839833981519152604482015290519081900360640190fd5b4284116106b7576040805160e560020a62461bcd02815260206004820152601360248201527f496e76616c6964206578706972792074696d6500000000000000000000000000604482015290519081900360640190fd5b6040805180820182528681526020808201878152600160a060020a03808c16600081815260058552868120928d168082529285528690209451855591516001909401939093558351908152908101919091528082018790526060810186905233608082015290517f90ee15f89c9a607f731c9e21490aa4fb787765ca244780c4cf14e60b6982fd6b9181900360a00190a150505050505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156107a457600080fd5b505af11580156107b8573d6000803e3d6000fd5b505050506040513d60208110156107ce57600080fd5b5051600160a060020a0316331461082f576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b610837611695565b565b600660209081526000928352604080842090915290825290205481565b60025460a060020a900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156108df57600080fd5b505af11580156108f3573d6000803e3d6000fd5b505050506040513d602081101561090957600080fd5b505160005433600160a060020a03928316811494509116149050818061092c5750805b806109bc57506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561098f57600080fd5b505af11580156109a3573d6000803e3d6000fd5b505050506040513d60208110156109b957600080fd5b50515b1515610a00576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611879833981519152604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610a6f57600080fd5b505af1158015610a83573d6000803e3d6000fd5b505050506040513d6020811015610a9957600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610af057600080fd5b505af1158015610b04573d6000803e3d6000fd5b505050506040513d6020811015610b1a57600080fd5b50511515610b72576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600254600160a060020a031681565b600080516020611859833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610bf157600080fd5b505af1158015610c05573d6000803e3d6000fd5b505050506040513d6020811015610c1b57600080fd5b505160005433600160a060020a039283168114945091161490508180610c3e5750805b80610cce57506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610ca157600080fd5b505af1158015610cb5573d6000803e3d6000fd5b505050506040513d6020811015610ccb57600080fd5b50515b1515610d12576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611879833981519152604482015290519081900360640190fd5b600160a060020a0386161515610d60576040805160e560020a62461bcd0281526020600482015260146024820152600080516020611819833981519152604482015290519081900360640190fd5b600160a060020a0385161515610dae576040805160e560020a62461bcd0281526020600482015260126024820152600080516020611839833981519152604482015290519081900360640190fd5b428411610e05576040805160e560020a62461bcd02815260206004820152601360248201527f496e76616c6964206578706972792074696d6500000000000000000000000000604482015290519081900360640190fd5b6040805160208181018352868252600160a060020a03808a16600081815260068452858120928b16808252928452859020935190935583519283529082015280820186905233606082015290517f025175e118727e402afd2852f5b550d8c3dd87e2d53f7315e978b815bbd31d189181900360800190a1505050505050565b60025460009060a060020a900460ff161515610b7257600160a060020a038086166000908152600660209081526040808320938816835292905220544211610ece57506000610f97565b600160a060020a038086166000908152600560209081526040808320938816835292905220600101544211801590610f2b5750600160a060020a038086166000908152600560209081526040808320938816835292905220548311155b15610b72578115610f9357600160a060020a03808616600090815260056020908152604080832093881683529290522054610f6c908463ffffffff61174b16565b600160a060020a038087166000908152600560209081526040808320938916835292905220555b5060025b949350505050565b600080516020611859833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561100457600080fd5b505af1158015611018573d6000803e3d6000fd5b505050506040513d602081101561102e57600080fd5b505160005433600160a060020a0392831681149450911614905081806110515750805b806110e157506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156110b457600080fd5b505af11580156110c8573d6000803e3d6000fd5b505050506040513d60208110156110de57600080fd5b50515b1515611125576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611879833981519152604482015290519081900360640190fd5b600160a060020a0385161515611173576040805160e560020a62461bcd0281526020600482015260146024820152600080516020611819833981519152604482015290519081900360640190fd5b600160a060020a03841615156111c1576040805160e560020a62461bcd0281526020600482015260126024820152600080516020611839833981519152604482015290519081900360640190fd5b600160a060020a038086166000818152600560209081526040808320948916808452948252808320838155600101929092558151928352820192909252338183015290517f9b2aceb68830f5eb0ad13b4e30560c85439547deab0060ce984aae641d34b0069181900360600190a15050505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561128957600080fd5b505af115801561129d573d6000803e3d6000fd5b505050506040513d60208110156112b357600080fd5b5051600160a060020a03163314611314576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b61083761175d565b60056020908152600092835260408084209091529082529020805460019091015482565b60008051602061185983398151915281565b600454600160a060020a031681565b600354600160a060020a031681565b600154600160a060020a031681565b604080516001808252818301909252606091829190602080830190803883390190505090506000805160206118598339815191528160008151811015156113c257fe5b60209081029091010152905090565b600054600160a060020a031681565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b600080516020611859833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561146957600080fd5b505af115801561147d573d6000803e3d6000fd5b505050506040513d602081101561149357600080fd5b505160005433600160a060020a0392831681149450911614905081806114b65750805b8061154657506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561151957600080fd5b505af115801561152d573d6000803e3d6000fd5b505050506040513d602081101561154357600080fd5b50515b151561158a576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611879833981519152604482015290519081900360640190fd5b600160a060020a03851615156115d8576040805160e560020a62461bcd0281526020600482015260146024820152600080516020611819833981519152604482015290519081900360640190fd5b600160a060020a0384161515611626576040805160e560020a62461bcd0281526020600482015260126024820152600080516020611839833981519152604482015290519081900360640190fd5b600160a060020a038086166000818152600660209081526040808320948916808452948252808320929092558151928352820192909252338183015290517f1032078cb6646bf29e5931e893a691532173df464fbddfbe03d8f2da71c643bd9181900360600190a15050505050565b60025460a060020a900460ff1615156116f8576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b60008282111561175757fe5b50900390565b60025460a060020a900460ff16156117bf576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a15600496e76616c69642066726f6d2061646472657373000000000000000000000000496e76616c696420746f206164647265737300000000000000000000000000005452414e534645525f415050524f56414c0000000000000000000000000000005065726d697373696f6e20636865636b206661696c6564000000000000000000a165627a7a723058203673092b8469ad061dd200d9feb726a74d1d166347b372572a043fe78a242b000029416c6c6f777320616e2069737375657220746f20736574206d616e75616c20617070726f76616c73206f7220626c6f636b7320666f72207370656369666963207061697273206f662061646472657373657320616e6420616d6f756e74732e20496e69742066756e6374696f6e2074616b6573206e6f20706172616d65746572732ea165627a7a72305820b833dfe0b957bc3eeb6b8830ed7a2f0ae9abae0c78f79c4a40d5bb7390f9256b0029",
  "sourceMap": "196:2484:52:-;;;526:199;8:9:-1;5:2;;;30:1;27;20:12;5:2;526:199:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;567:5:64;:18;;-1:-1:-1;;;;;;567:18:64;;;575:10;567:18;;;;;1123:31:14;;-1:-1:-1;;;;;1123:31:14;;;;;;;;;;;;;;1162:9;:22;;;;1192:9;:22;;;;1222:23;:43;196:2484:52;;;;;;",
  "deployedSourceMap": "196:2484:52:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;868:512;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;868:512:52;;;;;;;;;;;;;;;;-1:-1:-1;;;;;868:512:52;;;;;;;;;;;;;;363:38:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;363:38:14;;;;;;;;;;;;;;;;;;;;1444:71:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1444:71:52;;;;;;;;;;;;;;;;;;;;;;;1579:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1579:103:52;;;;1753:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1753:130:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1753:130:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3197:265:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3197:265:14;;;;;;;2548:193;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2548:193:14;;;;;275:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;275:22:14;;;;827:111:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;827:111:64;;;;303:24:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;303:24:14;;;;238:20:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:64;;;;2434:242:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2434:242:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;2434:242:52;;;;;;;;;;;;;;;;;2862:193:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2862:193:14;;;;;333:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;333:24:14;;;;2143:211:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2143:211:52;;;;1100:103:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1100:103:64;-1:-1:-1;;;;;1100:103:64;;;;;1948:106:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1948:106:52;;;;868:512;920:7;1111:29;955:1;943:9;;:13;939:162;;;978:9;;;1013:5;;1020:9;;978:52;;;;;;1001:10;978:52;;;;-1:-1:-1;;;;;1013:5:52;;;978:52;;;;;;;;;;;;:9;;;;;:22;;:52;;;;;;;;;;;;;;;;;;;:9;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;978:52:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;978:52:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;978:52:52;970:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1197:9;;1177:10;;-1:-1:-1;;;;;1197:9:52;1143:65;;:::i;:::-;-1:-1:-1;;;;;1143:65:52;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1143:65:52;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;1111:97:52;-1:-1:-1;1303:4:52;1284:9;:7;:9::i;:::-;1223:103;;;-1:-1:-1;;;;;1223:103:52;;;;1310:10;1223:103;;;;1322:3;1223:103;;;;;;;;;;;;;;;1351:21;868:512;-1:-1:-1;;;868:512:52:o;363:38:14:-;;;;:::o;1444:71:52:-;1507:1;1444:71;:::o;1579:103::-;1637:38;1579:103;:::o;1753:130::-;1817:59;;;1799:6;1817:59;;;;;;;;;;;;;;;;;;;;1753:130;:::o;3197:265:14:-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;3329:23:14;;3297:93;;;;;;;;;;;;3384:4;3297:93;;;;;;;;;;;;;;3400:23;:46;3197:265::o;2548:193::-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;2659:9:14;;2634:65;;;;;;;;;;;;2693:4;2634:65;;;;;;;;;;;;;;2709:9;:25;2548:193::o;275:22::-;;;-1:-1:-1;;;;;275:22:14;;:::o;827:111:64:-;719:5;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;903:5;;;884:25;;-1:-1:-1;;;;;903:5:64;;;;884:25;;;931:1;915:18;;-1:-1:-1;;915:18:64;;;827:111::o;303:24:14:-;;;;:::o;238:20:64:-;;;-1:-1:-1;;;;;238:20:64;;:::o;2434:242:52:-;2527:16;;;2541:1;2527:16;;;2473:9;2527:16;;;;;2473:9;;;2527:16;2541:1;2527:16;;;;;105:10:-1;2527:16:52;88:34:-1;136:17;;-1:-1;2527:16:52;2494:49;;2553:35;:13;2567:1;2553:16;;;;;;;;;;;;;;;;;;:35;2598:16;;:41;;:13;;2612:1;;2598:16;;;;;;;;;;;;;;:41;2656:13;-1:-1:-1;2434:242:52;:::o;2862:193:14:-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;2973:9:14;;2948:65;;;;;;;;;;;;3007:4;2948:65;;;;;;;;;;;;;;3023:9;:25;2862:193::o;333:24::-;;;;:::o;2143:211:52:-;2190:6;2208:139;;;;;;;;;;;;;;;;;;;;2143:211;:::o;1100:103:64:-;719:5;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;1169:29;1188:9;1169:18;:29::i;:::-;1100:103;:::o;1948:106:52:-;2006:41;;;;;;;;;;;;;;;;;;1948:106;:::o;1338:171:64:-;-1:-1:-1;;;;;1408:23:64;;;;1400:32;;;;;;1464:5;;;1443:38;;-1:-1:-1;;;;;1443:38:64;;;;1464:5;;;1443:38;;;1487:5;:17;;-1:-1:-1;;1487:17:64;-1:-1:-1;;;;;1487:17:64;;;;;;;;;;1338:171::o;196:2484:52:-;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./ManualApprovalTransferManager.sol\";\nimport \"../../interfaces/IModuleFactory.sol\";\n\n/**\n * @title Factory for deploying ManualApprovalTransferManager module\n */\ncontract ManualApprovalTransferManagerFactory is IModuleFactory {\n\n    /**\n     * @notice Constructor\n     * @param _polyAddress Address of the polytoken\n     * @param _setupCost Setup cost of the module\n     * @param _usageCost Usage cost of the module\n     * @param _subscriptionCost Subscription cost of the module\n     */\n    constructor (address _polyAddress, uint256 _setupCost, uint256 _usageCost, uint256 _subscriptionCost) public\n      IModuleFactory(_polyAddress, _setupCost, _usageCost, _subscriptionCost)\n    {\n\n    }\n\n     /**\n     * @notice used to launch the Module with the help of factory\n     * @return address Contract address of the Module\n     */\n    function deploy(bytes /* _data */) external returns(address) {\n        if (setupCost > 0)\n            require(polyToken.transferFrom(msg.sender, owner, setupCost), \"Failed transferFrom because of sufficent Allowance is not provided\");\n        address manualTransferManager = new ManualApprovalTransferManager(msg.sender, address(polyToken));\n        emit LogGenerateModuleFromFactory(address(manualTransferManager), getName(), address(this), msg.sender, now);\n        return address(manualTransferManager);\n    }\n\n    /**\n     * @notice Type of the Module factory\n     */\n    function getType() public view returns(uint8) {\n        return 2;\n    }\n\n    /**\n     * @notice Get the name of the Module\n     */\n    function getName() public view returns(bytes32) {\n        return \"ManualApprovalTransferManager\";\n    }\n\n    /**\n     * @notice Get the description of the Module\n     */\n    function getDescription() public view returns(string) {\n        return \"Manage transfers using single approvals / blocking\";\n    }\n\n    /**\n     * @notice Get the title of the Module\n     */\n    function getTitle() public view returns(string) {\n        return \"Manual Approval Transfer Manager\";\n    }\n\n    /**\n     * @notice Get the Instructions that helped to used the module\n     */\n    function getInstructions() public view returns(string) {\n        return \"Allows an issuer to set manual approvals or blocks for specific pairs of addresses and amounts. Init function takes no parameters.\";\n    }\n\n    /**\n     * @notice Get the tags related to the module factory\n     */\n    function getTags() public view returns(bytes32[]) {\n        bytes32[] memory availableTags = new bytes32[](2);\n        availableTags[0] = \"ManualApproval\";\n        availableTags[1] = \"Transfer Restriction\";\n        return availableTags;\n    }\n\n\n}\n",
  "sourcePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/ManualApprovalTransferManagerFactory.sol",
  "ast": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/ManualApprovalTransferManagerFactory.sol",
    "exportedSymbols": {
      "ManualApprovalTransferManagerFactory": [
        18950
      ]
    },
    "id": 18951,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 18804,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:52"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/ManualApprovalTransferManager.sol",
        "file": "./ManualApprovalTransferManager.sol",
        "id": 18805,
        "nodeType": "ImportDirective",
        "scope": 18951,
        "sourceUnit": 18803,
        "src": "26:45:52",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 18806,
        "nodeType": "ImportDirective",
        "scope": 18951,
        "sourceUnit": 9955,
        "src": "72:45:52",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 18807,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "245:14:52",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 18808,
            "nodeType": "InheritanceSpecifier",
            "src": "245:14:52"
          }
        ],
        "contractDependencies": [
          9954,
          18802,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying ManualApprovalTransferManager module",
        "fullyImplemented": true,
        "id": 18950,
        "linearizedBaseContracts": [
          18950,
          9954,
          22664
        ],
        "name": "ManualApprovalTransferManagerFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 18825,
              "nodeType": "Block",
              "src": "717:8:52",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken\n@param _setupCost Setup cost of the module\n@param _usageCost Usage cost of the module\n@param _subscriptionCost Subscription cost of the module",
            "id": 18826,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 18819,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18810,
                    "src": "656:12:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 18820,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18812,
                    "src": "670:10:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 18821,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18814,
                    "src": "682:10:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 18822,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18816,
                    "src": "694:17:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 18823,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 18818,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "641:14:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "641:71:52"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18817,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18810,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 18826,
                  "src": "539:20:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18809,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "539:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18812,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 18826,
                  "src": "561:18:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18811,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "561:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18814,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 18826,
                  "src": "581:18:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18813,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "581:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18816,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 18826,
                  "src": "601:25:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18815,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "601:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "538:89:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18824,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "717:0:52"
            },
            "scope": 18950,
            "src": "526:199:52",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18877,
              "nodeType": "Block",
              "src": "929:451:52",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 18835,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 18833,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "943:9:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 18834,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "955:1:52",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "943:13:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 18847,
                  "nodeType": "IfStatement",
                  "src": "939:162:52",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 18839,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23131,
                                "src": "1001:3:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 18840,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1001:10:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 18841,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22582,
                              "src": "1013:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 18842,
                              "name": "setupCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9727,
                              "src": "1020:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 18837,
                              "name": "polyToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9725,
                              "src": "978:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$22837",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 18838,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22819,
                            "src": "978:22:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 18843,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "978:52:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                          "id": 18844,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1032:68:52",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          },
                          "value": "Failed transferFrom because of sufficent Allowance is not provided"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          }
                        ],
                        "id": 18836,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          23134,
                          23135
                        ],
                        "referencedDeclaration": 23135,
                        "src": "970:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 18845,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "970:131:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 18846,
                    "nodeType": "ExpressionStatement",
                    "src": "970:131:52"
                  }
                },
                {
                  "assignments": [
                    18849
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18849,
                      "name": "manualTransferManager",
                      "nodeType": "VariableDeclaration",
                      "scope": 18878,
                      "src": "1111:29:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 18848,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1111:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18858,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18852,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1177:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 18853,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1177:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18855,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9725,
                            "src": "1197:9:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 18854,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1189:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18856,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1189:18:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18851,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1143:33:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_ManualApprovalTransferManager_$18802_$",
                        "typeString": "function (address,address) returns (contract ManualApprovalTransferManager)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 18850,
                        "name": "ManualApprovalTransferManager",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 18802,
                        "src": "1147:29:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ManualApprovalTransferManager_$18802",
                          "typeString": "contract ManualApprovalTransferManager"
                        }
                      }
                    },
                    "id": 18857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1143:65:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ManualApprovalTransferManager_$18802",
                      "typeString": "contract ManualApprovalTransferManager"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1111:97:52"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18861,
                            "name": "manualTransferManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18849,
                            "src": "1260:21:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18860,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1252:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18862,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1252:30:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 18863,
                          "name": "getName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            18894
                          ],
                          "referencedDeclaration": 18894,
                          "src": "1284:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 18864,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1284:9:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18866,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23296,
                            "src": "1303:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ManualApprovalTransferManagerFactory_$18950",
                              "typeString": "contract ManualApprovalTransferManagerFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ManualApprovalTransferManagerFactory_$18950",
                              "typeString": "contract ManualApprovalTransferManagerFactory"
                            }
                          ],
                          "id": 18865,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1295:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18867,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1295:13:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18868,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1310:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 18869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1310:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18870,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "1322:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18859,
                      "name": "LogGenerateModuleFromFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9767,
                      "src": "1223:28:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes32,address,address,uint256)"
                      }
                    },
                    "id": 18871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1223:103:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18872,
                  "nodeType": "EmitStatement",
                  "src": "1218:108:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18874,
                        "name": "manualTransferManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18849,
                        "src": "1351:21:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18873,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1343:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 18875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1343:30:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 18832,
                  "id": 18876,
                  "nodeType": "Return",
                  "src": "1336:37:52"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@return address Contract address of the Module",
            "id": 18878,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18829,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18828,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18878,
                  "src": "884:5:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 18827,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "884:5:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "883:19:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18832,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18831,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18878,
                  "src": "920:7:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18830,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "920:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "919:9:52"
            },
            "scope": 18950,
            "src": "868:512:52",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 18885,
              "nodeType": "Block",
              "src": "1490:25:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "32",
                    "id": 18883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1507:1:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2_by_1",
                      "typeString": "int_const 2"
                    },
                    "value": "2"
                  },
                  "functionReturnParameters": 18882,
                  "id": 18884,
                  "nodeType": "Return",
                  "src": "1500:8:52"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory",
            "id": 18886,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18879,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1460:2:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18882,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18881,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18886,
                  "src": "1483:5:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 18880,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1483:5:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1482:7:52"
            },
            "scope": 18950,
            "src": "1444:71:52",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18893,
              "nodeType": "Block",
              "src": "1627:55:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4d616e75616c417070726f76616c5472616e736665724d616e61676572",
                    "id": 18891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1644:31:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_7a5a536315e8db21d96f0835939e291dd28e1956cbde57eff39a9f1455651e1b",
                      "typeString": "literal_string \"ManualApprovalTransferManager\""
                    },
                    "value": "ManualApprovalTransferManager"
                  },
                  "functionReturnParameters": 18890,
                  "id": 18892,
                  "nodeType": "Return",
                  "src": "1637:38:52"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 18894,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18887,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1595:2:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18890,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18889,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18894,
                  "src": "1618:7:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18888,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1618:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1617:9:52"
            },
            "scope": 18950,
            "src": "1579:103:52",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18901,
              "nodeType": "Block",
              "src": "1807:76:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4d616e616765207472616e7366657273207573696e672073696e676c6520617070726f76616c73202f20626c6f636b696e67",
                    "id": 18899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1824:52:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_76ddcd20ef714843d960e0296375ee75d3480fb3e51294b0238ec5d687163980",
                      "typeString": "literal_string \"Manage transfers using single approvals / blocking\""
                    },
                    "value": "Manage transfers using single approvals / blocking"
                  },
                  "functionReturnParameters": 18898,
                  "id": 18900,
                  "nodeType": "Return",
                  "src": "1817:59:52"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 18902,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18895,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1776:2:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18898,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18897,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18902,
                  "src": "1799:6:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 18896,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1799:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1798:8:52"
            },
            "scope": 18950,
            "src": "1753:130:52",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18909,
              "nodeType": "Block",
              "src": "1996:58:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4d616e75616c20417070726f76616c205472616e73666572204d616e61676572",
                    "id": 18907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2013:34:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_71e8bc8da397c54070a73a7a87a14fd1893cb784dbc1c8e8bb9d61d70d82cce2",
                      "typeString": "literal_string \"Manual Approval Transfer Manager\""
                    },
                    "value": "Manual Approval Transfer Manager"
                  },
                  "functionReturnParameters": 18906,
                  "id": 18908,
                  "nodeType": "Return",
                  "src": "2006:41:52"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 18910,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18903,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1965:2:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18906,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18905,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18910,
                  "src": "1988:6:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 18904,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1988:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1987:8:52"
            },
            "scope": 18950,
            "src": "1948:106:52",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18917,
              "nodeType": "Block",
              "src": "2198:156:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "416c6c6f777320616e2069737375657220746f20736574206d616e75616c20617070726f76616c73206f7220626c6f636b7320666f72207370656369666963207061697273206f662061646472657373657320616e6420616d6f756e74732e20496e69742066756e6374696f6e2074616b6573206e6f20706172616d65746572732e",
                    "id": 18915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2215:132:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_08248e8a35d80bbb18ae39d34a85c93eb131def5247e296a4e9d650cc9328d13",
                      "typeString": "literal_string \"Allows an issuer to set manual approvals or blocks for specific pairs of addresses and amounts. Init function takes no parameters.\""
                    },
                    "value": "Allows an issuer to set manual approvals or blocks for specific pairs of addresses and amounts. Init function takes no parameters."
                  },
                  "functionReturnParameters": 18914,
                  "id": 18916,
                  "nodeType": "Return",
                  "src": "2208:139:52"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 18918,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18911,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2167:2:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18914,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18913,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18918,
                  "src": "2190:6:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 18912,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2190:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2189:8:52"
            },
            "scope": 18950,
            "src": "2143:211:52",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18948,
              "nodeType": "Block",
              "src": "2484:192:52",
              "statements": [
                {
                  "assignments": [
                    18927
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18927,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 18949,
                      "src": "2494:30:52",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 18925,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2494:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18926,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2494:9:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18933,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 18931,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2541:1:52",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 18930,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2527:13:52",
                      "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": 18928,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2531:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18929,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2531:9:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 18932,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2527:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2494:49:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 18934,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18927,
                        "src": "2553:13:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 18936,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 18935,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2567:1:52",
                        "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": "2553:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "4d616e75616c417070726f76616c",
                      "id": 18937,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2572:16:52",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_372bb587af1ef645abcb0324654b17b62b3ef887f7e2a77d8ee16a59948530eb",
                        "typeString": "literal_string \"ManualApproval\""
                      },
                      "value": "ManualApproval"
                    },
                    "src": "2553:35:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18939,
                  "nodeType": "ExpressionStatement",
                  "src": "2553:35:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18944,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 18940,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18927,
                        "src": "2598:13:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 18942,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 18941,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2612:1:52",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2598:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "5472616e73666572205265737472696374696f6e",
                      "id": 18943,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2617:22:52",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_1f1107ce03efdc6815f0e4c8942c399d895b30a78a8c319011b2bf9d6503adb7",
                        "typeString": "literal_string \"Transfer Restriction\""
                      },
                      "value": "Transfer Restriction"
                    },
                    "src": "2598:41:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18945,
                  "nodeType": "ExpressionStatement",
                  "src": "2598:41:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18946,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18927,
                    "src": "2656:13:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 18923,
                  "id": 18947,
                  "nodeType": "Return",
                  "src": "2649:20:52"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 18949,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18919,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2450:2:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18923,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18922,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18949,
                  "src": "2473:9:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 18920,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2473:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 18921,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2473:9:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2472:11:52"
            },
            "scope": 18950,
            "src": "2434:242:52",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 18951,
        "src": "196:2484:52"
      }
    ],
    "src": "0:2681:52"
  },
  "legacyAST": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/ManualApprovalTransferManagerFactory.sol",
    "exportedSymbols": {
      "ManualApprovalTransferManagerFactory": [
        18950
      ]
    },
    "id": 18951,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 18804,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:52"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/ManualApprovalTransferManager.sol",
        "file": "./ManualApprovalTransferManager.sol",
        "id": 18805,
        "nodeType": "ImportDirective",
        "scope": 18951,
        "sourceUnit": 18803,
        "src": "26:45:52",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 18806,
        "nodeType": "ImportDirective",
        "scope": 18951,
        "sourceUnit": 9955,
        "src": "72:45:52",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 18807,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "245:14:52",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 18808,
            "nodeType": "InheritanceSpecifier",
            "src": "245:14:52"
          }
        ],
        "contractDependencies": [
          9954,
          18802,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying ManualApprovalTransferManager module",
        "fullyImplemented": true,
        "id": 18950,
        "linearizedBaseContracts": [
          18950,
          9954,
          22664
        ],
        "name": "ManualApprovalTransferManagerFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 18825,
              "nodeType": "Block",
              "src": "717:8:52",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken\n@param _setupCost Setup cost of the module\n@param _usageCost Usage cost of the module\n@param _subscriptionCost Subscription cost of the module",
            "id": 18826,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 18819,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18810,
                    "src": "656:12:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 18820,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18812,
                    "src": "670:10:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 18821,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18814,
                    "src": "682:10:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 18822,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18816,
                    "src": "694:17:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 18823,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 18818,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "641:14:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "641:71:52"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18817,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18810,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 18826,
                  "src": "539:20:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18809,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "539:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18812,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 18826,
                  "src": "561:18:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18811,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "561:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18814,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 18826,
                  "src": "581:18:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18813,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "581:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18816,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 18826,
                  "src": "601:25:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18815,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "601:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "538:89:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18824,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "717:0:52"
            },
            "scope": 18950,
            "src": "526:199:52",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18877,
              "nodeType": "Block",
              "src": "929:451:52",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 18835,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 18833,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "943:9:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 18834,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "955:1:52",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "943:13:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 18847,
                  "nodeType": "IfStatement",
                  "src": "939:162:52",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 18839,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23131,
                                "src": "1001:3:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 18840,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1001:10:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 18841,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22582,
                              "src": "1013:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 18842,
                              "name": "setupCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9727,
                              "src": "1020:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 18837,
                              "name": "polyToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9725,
                              "src": "978:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$22837",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 18838,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22819,
                            "src": "978:22:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 18843,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "978:52:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                          "id": 18844,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1032:68:52",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          },
                          "value": "Failed transferFrom because of sufficent Allowance is not provided"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          }
                        ],
                        "id": 18836,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          23134,
                          23135
                        ],
                        "referencedDeclaration": 23135,
                        "src": "970:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 18845,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "970:131:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 18846,
                    "nodeType": "ExpressionStatement",
                    "src": "970:131:52"
                  }
                },
                {
                  "assignments": [
                    18849
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18849,
                      "name": "manualTransferManager",
                      "nodeType": "VariableDeclaration",
                      "scope": 18878,
                      "src": "1111:29:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 18848,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1111:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18858,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18852,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1177:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 18853,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1177:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18855,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9725,
                            "src": "1197:9:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 18854,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1189:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18856,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1189:18:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18851,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1143:33:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_ManualApprovalTransferManager_$18802_$",
                        "typeString": "function (address,address) returns (contract ManualApprovalTransferManager)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 18850,
                        "name": "ManualApprovalTransferManager",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 18802,
                        "src": "1147:29:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ManualApprovalTransferManager_$18802",
                          "typeString": "contract ManualApprovalTransferManager"
                        }
                      }
                    },
                    "id": 18857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1143:65:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ManualApprovalTransferManager_$18802",
                      "typeString": "contract ManualApprovalTransferManager"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1111:97:52"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18861,
                            "name": "manualTransferManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18849,
                            "src": "1260:21:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18860,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1252:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18862,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1252:30:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 18863,
                          "name": "getName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            18894
                          ],
                          "referencedDeclaration": 18894,
                          "src": "1284:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 18864,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1284:9:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18866,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23296,
                            "src": "1303:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ManualApprovalTransferManagerFactory_$18950",
                              "typeString": "contract ManualApprovalTransferManagerFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ManualApprovalTransferManagerFactory_$18950",
                              "typeString": "contract ManualApprovalTransferManagerFactory"
                            }
                          ],
                          "id": 18865,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1295:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18867,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1295:13:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18868,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1310:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 18869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1310:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18870,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "1322:3:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18859,
                      "name": "LogGenerateModuleFromFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9767,
                      "src": "1223:28:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes32,address,address,uint256)"
                      }
                    },
                    "id": 18871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1223:103:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18872,
                  "nodeType": "EmitStatement",
                  "src": "1218:108:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18874,
                        "name": "manualTransferManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18849,
                        "src": "1351:21:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18873,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1343:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 18875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1343:30:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 18832,
                  "id": 18876,
                  "nodeType": "Return",
                  "src": "1336:37:52"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@return address Contract address of the Module",
            "id": 18878,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18829,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18828,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18878,
                  "src": "884:5:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 18827,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "884:5:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "883:19:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18832,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18831,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18878,
                  "src": "920:7:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18830,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "920:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "919:9:52"
            },
            "scope": 18950,
            "src": "868:512:52",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 18885,
              "nodeType": "Block",
              "src": "1490:25:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "32",
                    "id": 18883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1507:1:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2_by_1",
                      "typeString": "int_const 2"
                    },
                    "value": "2"
                  },
                  "functionReturnParameters": 18882,
                  "id": 18884,
                  "nodeType": "Return",
                  "src": "1500:8:52"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory",
            "id": 18886,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18879,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1460:2:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18882,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18881,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18886,
                  "src": "1483:5:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 18880,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1483:5:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1482:7:52"
            },
            "scope": 18950,
            "src": "1444:71:52",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18893,
              "nodeType": "Block",
              "src": "1627:55:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4d616e75616c417070726f76616c5472616e736665724d616e61676572",
                    "id": 18891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1644:31:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_7a5a536315e8db21d96f0835939e291dd28e1956cbde57eff39a9f1455651e1b",
                      "typeString": "literal_string \"ManualApprovalTransferManager\""
                    },
                    "value": "ManualApprovalTransferManager"
                  },
                  "functionReturnParameters": 18890,
                  "id": 18892,
                  "nodeType": "Return",
                  "src": "1637:38:52"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 18894,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18887,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1595:2:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18890,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18889,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18894,
                  "src": "1618:7:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18888,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1618:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1617:9:52"
            },
            "scope": 18950,
            "src": "1579:103:52",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18901,
              "nodeType": "Block",
              "src": "1807:76:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4d616e616765207472616e7366657273207573696e672073696e676c6520617070726f76616c73202f20626c6f636b696e67",
                    "id": 18899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1824:52:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_76ddcd20ef714843d960e0296375ee75d3480fb3e51294b0238ec5d687163980",
                      "typeString": "literal_string \"Manage transfers using single approvals / blocking\""
                    },
                    "value": "Manage transfers using single approvals / blocking"
                  },
                  "functionReturnParameters": 18898,
                  "id": 18900,
                  "nodeType": "Return",
                  "src": "1817:59:52"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 18902,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18895,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1776:2:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18898,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18897,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18902,
                  "src": "1799:6:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 18896,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1799:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1798:8:52"
            },
            "scope": 18950,
            "src": "1753:130:52",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18909,
              "nodeType": "Block",
              "src": "1996:58:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4d616e75616c20417070726f76616c205472616e73666572204d616e61676572",
                    "id": 18907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2013:34:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_71e8bc8da397c54070a73a7a87a14fd1893cb784dbc1c8e8bb9d61d70d82cce2",
                      "typeString": "literal_string \"Manual Approval Transfer Manager\""
                    },
                    "value": "Manual Approval Transfer Manager"
                  },
                  "functionReturnParameters": 18906,
                  "id": 18908,
                  "nodeType": "Return",
                  "src": "2006:41:52"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 18910,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18903,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1965:2:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18906,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18905,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18910,
                  "src": "1988:6:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 18904,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1988:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1987:8:52"
            },
            "scope": 18950,
            "src": "1948:106:52",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18917,
              "nodeType": "Block",
              "src": "2198:156:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "416c6c6f777320616e2069737375657220746f20736574206d616e75616c20617070726f76616c73206f7220626c6f636b7320666f72207370656369666963207061697273206f662061646472657373657320616e6420616d6f756e74732e20496e69742066756e6374696f6e2074616b6573206e6f20706172616d65746572732e",
                    "id": 18915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2215:132:52",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_08248e8a35d80bbb18ae39d34a85c93eb131def5247e296a4e9d650cc9328d13",
                      "typeString": "literal_string \"Allows an issuer to set manual approvals or blocks for specific pairs of addresses and amounts. Init function takes no parameters.\""
                    },
                    "value": "Allows an issuer to set manual approvals or blocks for specific pairs of addresses and amounts. Init function takes no parameters."
                  },
                  "functionReturnParameters": 18914,
                  "id": 18916,
                  "nodeType": "Return",
                  "src": "2208:139:52"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 18918,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18911,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2167:2:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18914,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18913,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18918,
                  "src": "2190:6:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 18912,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2190:6:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2189:8:52"
            },
            "scope": 18950,
            "src": "2143:211:52",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18948,
              "nodeType": "Block",
              "src": "2484:192:52",
              "statements": [
                {
                  "assignments": [
                    18927
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18927,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 18949,
                      "src": "2494:30:52",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 18925,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2494:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18926,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2494:9:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18933,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 18931,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2541:1:52",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 18930,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2527:13:52",
                      "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": 18928,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2531:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18929,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2531:9:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 18932,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2527:16:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2494:49:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 18934,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18927,
                        "src": "2553:13:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 18936,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 18935,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2567:1:52",
                        "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": "2553:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "4d616e75616c417070726f76616c",
                      "id": 18937,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2572:16:52",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_372bb587af1ef645abcb0324654b17b62b3ef887f7e2a77d8ee16a59948530eb",
                        "typeString": "literal_string \"ManualApproval\""
                      },
                      "value": "ManualApproval"
                    },
                    "src": "2553:35:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18939,
                  "nodeType": "ExpressionStatement",
                  "src": "2553:35:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18944,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 18940,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18927,
                        "src": "2598:13:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 18942,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 18941,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2612:1:52",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2598:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "5472616e73666572205265737472696374696f6e",
                      "id": 18943,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2617:22:52",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_1f1107ce03efdc6815f0e4c8942c399d895b30a78a8c319011b2bf9d6503adb7",
                        "typeString": "literal_string \"Transfer Restriction\""
                      },
                      "value": "Transfer Restriction"
                    },
                    "src": "2598:41:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18945,
                  "nodeType": "ExpressionStatement",
                  "src": "2598:41:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18946,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18927,
                    "src": "2656:13:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 18923,
                  "id": 18947,
                  "nodeType": "Return",
                  "src": "2649:20:52"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 18949,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18919,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2450:2:52"
            },
            "payable": false,
            "returnParameters": {
              "id": 18923,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18922,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18949,
                  "src": "2473:9:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 18920,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2473:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 18921,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2473:9:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2472:11:52"
            },
            "scope": 18950,
            "src": "2434:242:52",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 18951,
        "src": "196:2484:52"
      }
    ],
    "src": "0:2681:52"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-08-21T09:48:12.661Z"
}