{
  "contractName": "ExampleTemplate",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "ens",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "fac",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "latestVersionAppBase",
      "outputs": [
        {
          "name": "base",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "ens",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "dao",
          "type": "address"
        }
      ],
      "name": "DeployInstance",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "appProxy",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "appId",
          "type": "bytes32"
        }
      ],
      "name": "InstalledApp",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_depositedToken",
          "type": "address"
        }
      ],
      "name": "newInstance",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.4.24+commit.e67f0147\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"ens\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_depositedToken\",\"type\":\"address\"}],\"name\":\"newInstance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fac\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"appId\",\"type\":\"bytes32\"}],\"name\":\"latestVersionAppBase\",\"outputs\":[{\"name\":\"base\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"ens\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"dao\",\"type\":\"address\"}],\"name\":\"DeployInstance\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"appProxy\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"appId\",\"type\":\"bytes32\"}],\"name\":\"InstalledApp\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/examples/ExampleTemplate.sol\":\"ExampleTemplate\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/TokenWrapper.sol\":{\"keccak256\":\"0x6c873e6a579aa8496bcde71406940469b6d8cb96933e6debfb122599de9803bc\",\"urls\":[\"bzzr://4d7e5a68ae094c2a17b515e5a82fd3811db5786b00ff23ce9198dc05e8cf3cf0\"]},\"/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/examples/ExampleTemplate.sol\":{\"keccak256\":\"0x32fcceb752a607c0e562eddab5a937f3d6f795befc2506e8830c78aea7d6c6c4\",\"urls\":[\"bzzr://6fc4b1fd47b1ab254ba9550ca484902f31022858f8de125cf4334bc00e655768\"]},\"/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/examples/IVotingGenericInitializer.sol\":{\"keccak256\":\"0x66586ccfed9f4b35968e571af4894fd7373f1378a25d3aa9142229a6779d004f\",\"urls\":[\"bzzr://9331b42b77019cb481aaba80af78caddba080b827105397e3f0dbb97212ee5e7\"]},\"@aragon/apps-shared-minime/contracts/ITokenController.sol\":{\"keccak256\":\"0x030d1ea5543fd23d3c962cbf34b1c3b6e15d9bbfb711416e1cf4160c3bcdccaa\",\"urls\":[\"bzzr://64ccd0852c1b90d55248f9b56898854c32bd881a9eb61637d6ecb7430a77764c\"]},\"@aragon/apps-shared-minime/contracts/MiniMeToken.sol\":{\"keccak256\":\"0xae8693d9ccee144cfd4949f87d0994d12e7d232b0b39d3f2f72a7b5c1e54800c\",\"urls\":[\"bzzr://077b0f24788509f8aecd01587c0522a3b22c15c6bbdfe8b65a5234f3ae3502cf\"]},\"@aragon/apps-voting/contracts/Voting.sol\":{\"keccak256\":\"0x02d197def022067a0841bed3bbdfdf08403a43ab9ffa8e69cd6bf45318315b5f\",\"urls\":[\"bzzr://7923ff46bfa140c3b7c1ed55e1f8dc9b4a3f77fc620454ad2f246d339b959ce8\"]},\"@aragon/os/contracts/acl/ACL.sol\":{\"keccak256\":\"0xcb2488421b22af099bafe210916d33c9b7c3a06c4290583ff74733a825860754\",\"urls\":[\"bzzr://3bcd0183d28b5c50f72345d8aa2635eb89dba2d45e382c0f59ae66ead2296ad4\"]},\"@aragon/os/contracts/acl/ACLSyntaxSugar.sol\":{\"keccak256\":\"0x519915c14576b679b5ed5767d6b21b44a13aa7ae2fe7b33664ca364fafc33e00\",\"urls\":[\"bzzr://8d899afdbf161eaa5e6ce6a68d9ea420c3f98a00a71d70b293e8de8771e6aa62\"]},\"@aragon/os/contracts/acl/IACL.sol\":{\"keccak256\":\"0xe3492bc29d2482e65d2e39c96487b5388f6181f6bcdc6fe6329b8206b84c0cf1\",\"urls\":[\"bzzr://3af0b7e423c7ff4100a3b5868203ec169c866328f2d93d3b6a2111e916cdc411\"]},\"@aragon/os/contracts/acl/IACLOracle.sol\":{\"keccak256\":\"0xada5651af900192b440c9a7802d531846d9d4ce12338b53f3091257b4c2e9f28\",\"urls\":[\"bzzr://1b9787c7808d9217e6df31f50d62f78336909a695d80a6bfb1d031a2d968f7f4\"]},\"@aragon/os/contracts/apm/APMNamehash.sol\":{\"keccak256\":\"0x15fab5cd60bed163fa1234561ec86a04d88d8f54522d97dcbf39e1e6cfdb01d6\",\"urls\":[\"bzzr://01db35be687b97c8543f665e070950f42b65df68a4c95a9be082377637e5d133\"]},\"@aragon/os/contracts/apm/Repo.sol\":{\"keccak256\":\"0x4df44671f92e5410aa0fca7f515b562784a8da63e21e8872fdf275835d5c2dd1\",\"urls\":[\"bzzr://31ea9c115b16797b6f3c4c2620da057912eafe14e7382bfb5520c9451b863490\"]},\"@aragon/os/contracts/apps/AppProxyBase.sol\":{\"keccak256\":\"0x6d591412d30dc3d5079f8c5cab04f83ad44be376a9e4143d4a3b2067cd7a4483\",\"urls\":[\"bzzr://fa928f595ac4de05bb78303e1e6ee186331d10602dbb8bc56c23c9761584a26b\"]},\"@aragon/os/contracts/apps/AppProxyPinned.sol\":{\"keccak256\":\"0xbe6285bcc237c696e297948be02cfad8d48812ba52d67f8947b52c0546da53b1\",\"urls\":[\"bzzr://217ba70dd30d05d654c4537fce1d353e7e751ba44fea487559f60aa69f9f255f\"]},\"@aragon/os/contracts/apps/AppProxyUpgradeable.sol\":{\"keccak256\":\"0xbcc626f70099c7e859b9c2bb8ca91e72b84f9e6783f91277e40737d51bd2c433\",\"urls\":[\"bzzr://b4467e610b0a9d79c703c4ff711a1acce11dea6d33b79298734ef8ecc1c71728\"]},\"@aragon/os/contracts/apps/AppStorage.sol\":{\"keccak256\":\"0xb1c8eb71d1bdfe1241cc1714b280b46bbfc5bcb1e8499d42c24d3f5f5e8130f1\",\"urls\":[\"bzzr://503beec9e0e19834cb685a1d037eb9caaa412e3709d90bf6e53f51d143d58029\"]},\"@aragon/os/contracts/apps/AragonApp.sol\":{\"keccak256\":\"0xba456000d65bea8d9d82e9f1789086c3777df68fe364f8f397973b6d579f3a2a\",\"urls\":[\"bzzr://85ae9658277830a9454e34e319f8fbcb27d4e015d3bb1219c4d42ec33b9a184e\"]},\"@aragon/os/contracts/common/Autopetrified.sol\":{\"keccak256\":\"0x216e6ecbdcf45d90e8846ab2773072bd82180558a7dcf0c5425ed13b0188c5f3\",\"urls\":[\"bzzr://95b7ec6b2e8d3d8cd8c02f9be8b17d715c48a35445ba194429cca5264bfd0435\"]},\"@aragon/os/contracts/common/ConversionHelpers.sol\":{\"keccak256\":\"0x9872383d458352f5c68fa5afd1fc84ab6b172cbee33359cfa57655b8eda92416\",\"urls\":[\"bzzr://4636d13fecb497561ff5a2c54bb936a0339308bffa4e71a988b8ce00dcc249f3\"]},\"@aragon/os/contracts/common/DelegateProxy.sol\":{\"keccak256\":\"0x381a4ab9b57abf496b337146a52d533aaf6a8247941fbc19735cbde0e891e85b\",\"urls\":[\"bzzr://f7457df0e3f0ec11cb66a6b90017299fbb4ea1129ec88739af56682032f95c02\"]},\"@aragon/os/contracts/common/DepositableDelegateProxy.sol\":{\"keccak256\":\"0x80a08f88ca7051a248c6fd91283fef4b01b241d1dc97e13499f1460093ff3068\",\"urls\":[\"bzzr://5b130a1a8a655a0c1cb184ed7857bd68ace262d4904d2ed3f94b660721074f11\"]},\"@aragon/os/contracts/common/DepositableStorage.sol\":{\"keccak256\":\"0x67e1884ba4c91de1c6fe1fc2c1c632c29ed3e7894a434c049be9f1ed80539237\",\"urls\":[\"bzzr://94f42ad7b57e419a62b9505affe5d4b17e8a139bfc5c26ec3c17ed6572589a1a\"]},\"@aragon/os/contracts/common/EtherTokenConstant.sol\":{\"keccak256\":\"0xb18d16ad5127519251d9759349bf0ce1e5cfc861a776c5297b91a625c84d0363\",\"urls\":[\"bzzr://42b57d455cdbf7a8ab1383eb977c55d1826870a488cfc0cbc906a3d0f9ad2328\"]},\"@aragon/os/contracts/common/IForwarder.sol\":{\"keccak256\":\"0xd862ca160ed12725de3044b1f1c90248e8c26ec764f64f2c06ac57279a7a712b\",\"urls\":[\"bzzr://9385ac177e250e9e05e34772a7f6c1cd05fb8ecf4220c1a2c028b03da4fdeabf\"]},\"@aragon/os/contracts/common/IVaultRecoverable.sol\":{\"keccak256\":\"0xd7cb66ee5d01be69a6abab04583cc86755bf63c2f1fd03b519a876162f52b323\",\"urls\":[\"bzzr://acb75e2637639bbc83b95032a822a54a588889f203b188e97cd78292cc0ee7f5\"]},\"@aragon/os/contracts/common/Initializable.sol\":{\"keccak256\":\"0xc559fdbee1c0ee18b6f2f866c28ed6eb96859b2c88f75867ca11f25ebd00b090\",\"urls\":[\"bzzr://3d3bca8b35030fc12f94bb52a162be9520868b27ff2cb32f09179d67b6ffdf93\"]},\"@aragon/os/contracts/common/IsContract.sol\":{\"keccak256\":\"0xb76e263e3532883fe32dfe4b1447eb487a570e121c5cce01cee604dd9e44a075\",\"urls\":[\"bzzr://4a7dd7aafff496a2c6403a7e9f4e74562088b5a38e2f6e2670e38dab11b9cd8f\"]},\"@aragon/os/contracts/common/Petrifiable.sol\":{\"keccak256\":\"0xb69f9d6de8ff6f2a084aca2e0228c9008a8776482a70bcab16f46a693ec77be6\",\"urls\":[\"bzzr://ca1d7bb504b8d9d75c162f5edc8588ac86934b69f765f2010d603027dc534375\"]},\"@aragon/os/contracts/common/ReentrancyGuard.sol\":{\"keccak256\":\"0x2b2014de57620aedded6365e742e17b9a23492d754e48dfeefa56f7e5bcf5645\",\"urls\":[\"bzzr://1aa2b79808ccb14b6c2d68f9283bd40300877c749b44edf0f66d78f0c1d17708\"]},\"@aragon/os/contracts/common/SafeERC20.sol\":{\"keccak256\":\"0xd251a1207e1faa4c41500bf927310bb739b1fbc0bf880f236f8e0a9236d6a03a\",\"urls\":[\"bzzr://b2d0f5981950b4e90eaee65c85050ac4f86a79f579f4ef38e6b281c0de980b2b\"]},\"@aragon/os/contracts/common/TimeHelpers.sol\":{\"keccak256\":\"0x95b785dc4319f6ce5255c9adf5e68a469a0f837f7b02e01b6bc974b4921d4024\",\"urls\":[\"bzzr://53f41920d95ed5cb7326de3062063c9296076809377fbadf2cbd26ab0c84ffd1\"]},\"@aragon/os/contracts/common/Uint256Helpers.sol\":{\"keccak256\":\"0x83033025a3f4402be3b7bcc9a23ce96ae4fadc7f251da8f139d73a13a3400b0c\",\"urls\":[\"bzzr://bd0e059eff36a66c3a28298ed5a2e1b058ce93057866ab36063e9f3095cef36f\"]},\"@aragon/os/contracts/common/UnstructuredStorage.sol\":{\"keccak256\":\"0xe0d627fc7a7716409389f34cfe49366ba7871309d3a73262ec9608ef73e47591\",\"urls\":[\"bzzr://9742204494402cdecc66b266f0e420fcfe2677ba710db7651c40f96a63940bef\"]},\"@aragon/os/contracts/common/VaultRecoverable.sol\":{\"keccak256\":\"0x4f4de2c27ea7df731ad7d9babc37965a805282fed16b422f46a35d9d2ef931a1\",\"urls\":[\"bzzr://02d492884e6b1cf7c0869974219c40453d23cf2021cc1deaa6895e0f1b4404b9\"]},\"@aragon/os/contracts/evmscript/EVMScriptRegistry.sol\":{\"keccak256\":\"0x0a8a940995af70625b926c4a70f3d847841f7da2601087436e3bae9b41af76c4\",\"urls\":[\"bzzr://fe95cca41c61cdffdb03e231fbab7c1c7a33e24cb0f48f5d5f5056fc797078cd\"]},\"@aragon/os/contracts/evmscript/EVMScriptRunner.sol\":{\"keccak256\":\"0xcb6b5f7d2610321882cdc86819f1a51341c33b510fff7c60936ac7d7a015d7be\",\"urls\":[\"bzzr://bc430c1487d75909dc059de848123822c257ea9e7c812a7252c10986be253e21\"]},\"@aragon/os/contracts/evmscript/IEVMScriptExecutor.sol\":{\"keccak256\":\"0x9cab64cd2f10148d4e20433ecd11679e69be1fbde112892c48db94f92e48c571\",\"urls\":[\"bzzr://b4bf9f4fc41e6e7791a84d0847410677fc0066ed393872186d90f819f5f22cc0\"]},\"@aragon/os/contracts/evmscript/IEVMScriptRegistry.sol\":{\"keccak256\":\"0x00d98507ec160cb7cc814cc9bdebd01a414353636d6045720fe6d1592277694b\",\"urls\":[\"bzzr://170505211d1846fe24b89cfceea7f5b59a587527f68f89e8f36fed8e08b02db4\"]},\"@aragon/os/contracts/evmscript/ScriptHelpers.sol\":{\"keccak256\":\"0xb602b537d0a349e3b461b40dee544a13214cc2a69b3dd7dcc58a8992c5c7ff91\",\"urls\":[\"bzzr://ab7276544b833100a6f62cb21936c5e2399ad275a87094e3963fc32660541e68\"]},\"@aragon/os/contracts/evmscript/executors/BaseEVMScriptExecutor.sol\":{\"keccak256\":\"0x753b306dd5db5193cffe28207b5580795dbf282a58a86b230af8260e6130b9ed\",\"urls\":[\"bzzr://59da6d3ce9a47180a82a286fd2970ca9e7974b5fa81ce7916e427792d784255e\"]},\"@aragon/os/contracts/evmscript/executors/CallsScript.sol\":{\"keccak256\":\"0xc7078b505c6e458b5d4d7d47df87245b3bdb96f8c21d2b93669d6b5251456a2c\",\"urls\":[\"bzzr://a77cc8bc48f5c4e3345171cc6df12109c58c297323aff7d67471c9be1ae1396d\"]},\"@aragon/os/contracts/factory/AppProxyFactory.sol\":{\"keccak256\":\"0x94e88f4e8747be9487e32069eb22c1455ffc49cfd1299ef1eba212049c2db115\",\"urls\":[\"bzzr://b4e9f5de68841156d93b92e55ef031762a2a273215b19190d93cac86b1776ea4\"]},\"@aragon/os/contracts/factory/DAOFactory.sol\":{\"keccak256\":\"0x606c9813487fba0c479b0e5b2bc077bab428d6c24b480936c5172bfb9d5598b6\",\"urls\":[\"bzzr://c66f36b79057ea27f6ae43969a47d308d70342a77535a7256a393331afb8ea2c\"]},\"@aragon/os/contracts/factory/EVMScriptRegistryFactory.sol\":{\"keccak256\":\"0xf879b2069ae82e266b79c48bde64a6f1f051bdc5c566cf01e0cc2e8844c381a7\",\"urls\":[\"bzzr://a9779103ad40d8ac1a9ebd761ac640050dca9aea2ca4dc77f0cde552a62fb8f3\"]},\"@aragon/os/contracts/kernel/IKernel.sol\":{\"keccak256\":\"0xd02b98282ccd271b0caa86f2c249986f1619dcf41811f5dadce520b32610b68e\",\"urls\":[\"bzzr://e77000fc50cf4cfb160518af1cfb612e6cbbc06cb4357b1e03ff492fd17d8d2e\"]},\"@aragon/os/contracts/kernel/Kernel.sol\":{\"keccak256\":\"0x117b1e169c984a4ad9070d5d7784bf91f8b1b16d3e695694cde253181b5ade3e\",\"urls\":[\"bzzr://1b5c68c03da122c98cdf6d36c5a26309bb0199afc9790fa5fa6c2311be46875b\"]},\"@aragon/os/contracts/kernel/KernelConstants.sol\":{\"keccak256\":\"0x95e46be2becfb4c8952880909cd32adf5dcfa8c2e0fdf4ae054bbf83ef7f53cd\",\"urls\":[\"bzzr://68d3ce6cda841600d1e5724c0752314a084e4eeebc1fdcb6bc22c92d77c9a3db\"]},\"@aragon/os/contracts/kernel/KernelProxy.sol\":{\"keccak256\":\"0xb60dea1ebaf0e3e634b0782ef98fdd854b3de5bb639f56c2937ca34b676940ba\",\"urls\":[\"bzzr://0a663339ee5ef7f84addfe2161b89b8bd974ec9666da371a0e6f66b79434f9e2\"]},\"@aragon/os/contracts/kernel/KernelStorage.sol\":{\"keccak256\":\"0x682eac86f7a617281098c15cadbaeec72a50cbe49101861a1454519df1718a4c\",\"urls\":[\"bzzr://f988478fa117c50841e0ecebb437b5bce214c3965de387e248e72f3266e86be5\"]},\"@aragon/os/contracts/lib/ens/AbstractENS.sol\":{\"keccak256\":\"0x8deaa274dfc550c8251576dfa0dde1e58933728ced575de4f5b12391fd358c95\",\"urls\":[\"bzzr://8b03da0d3461879e624d00d27d32c0e28fbb7c13d934ca3bb261225c5632aa0b\"]},\"@aragon/os/contracts/lib/ens/ENS.sol\":{\"keccak256\":\"0x919b4beefbead7971bfe6a2a01025919d10091fd412b4e7ffaccc8661d7e2863\",\"urls\":[\"bzzr://0f92b33949e37e6f8d2fb52daa108fc3c823c3fdab4db04a9231c24012900109\"]},\"@aragon/os/contracts/lib/ens/PublicResolver.sol\":{\"keccak256\":\"0x8c538f586fdf66528c5c6e2e916c79f00762a2fba3ec0e7be78dc0e3fda4ac2c\",\"urls\":[\"bzzr://b49189c02861a9bd108f64a504bc77e7c0ea681ccdd5a582c5f3a94c43c5f2c3\"]},\"@aragon/os/contracts/lib/math/SafeMath.sol\":{\"keccak256\":\"0x2e11c8dcead82c452ef452f4dbced40e20ae105fa4145d920dac6e077b31d846\",\"urls\":[\"bzzr://91dbd0e3335720d4a3d12a90682b8d9834f76e75918c1f646a84debb38089ece\"]},\"@aragon/os/contracts/lib/math/SafeMath64.sol\":{\"keccak256\":\"0x34f18573e7b2180645c67faaff60ebc713ab22c697606d3b3ce4fe0e745955f4\",\"urls\":[\"bzzr://192cb9d1b7a1fbf7e3709b1a18bccd3ee023f5b98e117246dc7ddc701e2fd9c0\"]},\"@aragon/os/contracts/lib/misc/ERCProxy.sol\":{\"keccak256\":\"0x7ede022292e2e9b7042b933e9ced7213f1e5c6c76fdd02c078a3abbbc03c7ee3\",\"urls\":[\"bzzr://3cb0c6f7982d8671ffabe9f1d631edef9905113afef3540574b2ea0e314ce9a1\"]},\"@aragon/os/contracts/lib/token/ERC20.sol\":{\"keccak256\":\"0xa2e319fde92f9e70912f09bf6e99bbf8b9b798961d54ffcba59d347d37bde1b7\",\"urls\":[\"bzzr://8c9a4aec8e185884f26ffb125975bd52c2363359b9adff481649c59cfe15660f\"]},\"@aragonone/voting-connectors-contract-utils/contracts/Checkpointing.sol\":{\"keccak256\":\"0xb6821c40c370cf6088e640a32adda80a394efbdd33f678e53813875c3ff61f1a\",\"urls\":[\"bzzr://dfeaf443b60d4aff738934d125eea2ca066091453fb1373432d9ab732d12ae5f\"]},\"@aragonone/voting-connectors-contract-utils/contracts/CheckpointingHelpers.sol\":{\"keccak256\":\"0x842f94c1bd4fc1cab0273138b432e723cedcd8bf9a59ec38550a8b619a92a02d\",\"urls\":[\"bzzr://ab15e73a508883816a8d699b6f9266e56a3cc2412df09b78fa2f9e6b3ae16cc2\"]},\"@aragonone/voting-connectors-contract-utils/contracts/ERC20ViewOnly.sol\":{\"keccak256\":\"0x9d5b93d45e2d6414842a300d862e65d1df4620503a3af17b06c91c55d775a4af\",\"urls\":[\"bzzr://511a056abecf9136a6cca1e5045f8d57c0c0e4c36d0213e612f0919807d61e8a\"]},\"@aragonone/voting-connectors-contract-utils/contracts/interfaces/IERC20WithCheckpointing.sol\":{\"keccak256\":\"0x580d44b95215fcf734f4d4565822b865cfe48632ce122d86f79e933c80bf4bdc\",\"urls\":[\"bzzr://1c6c396c431336c6f8ced6fa57bed9e2056f4d24dd10aa5eb27925a361d933dc\"]},\"@aragonone/voting-connectors-contract-utils/contracts/interfaces/IERC20WithDecimals.sol\":{\"keccak256\":\"0xef25959eaa4c485d50898e970aff564a03a9b4aec6c69eb22abe76bcef31c183\",\"urls\":[\"bzzr://dd28923582fa223fe03d9aedac4ee68a1f08792a94691444a60eafc15cc8500c\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b5060405160208062001ada833981016040525160008054600160a060020a038316600160a060020a0319909116178155818160408051808201909152600881527f626172652d6b697400000000000000000000000000000000000000000000000060208201526200008b906401000000006200014f810204565b9050620000a18164010000000062000255810204565b600160a060020a031663c3b314726040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620000f857600080fd5b505af11580156200010d573d6000803e3d6000fd5b505050506040513d60208110156200012457600080fd5b505160018054600160a060020a031916600160a060020a03909216919091179055505050506200047f565b60007f9065c3e7f7b7ef1ef4e53d2d0b8e0cef02874ab020c1ece79d5f0d3d0111c0ba600102826040518082805190602001908083835b60208310620001a75780518252601f19909201916020918201910162000186565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b60208310620002235780518252601f19909201916020918201910162000202565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095945050505050565b60008054604080517f0178b8bf0000000000000000000000000000000000000000000000000000000081526004810185905290518392600160a060020a031691630178b8bf91602480830192602092919082900301818787803b158015620002bc57600080fd5b505af1158015620002d1573d6000803e3d6000fd5b505050506040513d6020811015620002e857600080fd5b5051604080517f3b3b57de000000000000000000000000000000000000000000000000000000008152600481018690529051600160a060020a0390921691633b3b57de916024808201926020929091908290030181600087803b1580156200034f57600080fd5b505af115801562000364573d6000803e3d6000fd5b505050506040513d60208110156200037b57600080fd5b5051604080517fc36af4600000000000000000000000000000000000000000000000000000000081529051919250600160a060020a0383169163c36af4609160048082019260009290919082900301818387803b158015620003dc57600080fd5b505af1158015620003f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260a08110156200041b57600080fd5b606082015160808301805191928401918491906401000000008111156200044157600080fd5b820160208101848111156200045557600080fd5b81516401000000008111828201871017156200047057600080fd5b50949998505050505050505050565b61164b806200048f6000396000f3006080604052600436106100615763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633f15457f81146100665780638b128f25146100a4578063c3b31472146100d4578063c6d2c717146100e9575b600080fd5b34801561007257600080fd5b5061007b610101565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156100b057600080fd5b506100d273ffffffffffffffffffffffffffffffffffffffff6004351661011d565b005b3480156100e057600080fd5b5061007b611226565b3480156100f557600080fd5b5061007b600435611242565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600154604080517f21687444000000000000000000000000000000000000000000000000000000008152306004820152905160009283928392839283928392839273ffffffffffffffffffffffffffffffffffffffff1691632168744491602480830192602092919082900301818787803b15801561019b57600080fd5b505af11580156101af573d6000803e3d6000fd5b505050506040513d60208110156101c557600080fd5b5051604080517fde287359000000000000000000000000000000000000000000000000000000008152905191985073ffffffffffffffffffffffffffffffffffffffff89169163de287359916004808201926020929091908290030181600087803b15801561023357600080fd5b505af1158015610247573d6000803e3d6000fd5b505050506040513d602081101561025d57600080fd5b5051604080517f8ea8dc9d000000000000000000000000000000000000000000000000000000008152905191975073ffffffffffffffffffffffffffffffffffffffff8089169263be0384789230928c9290831691638ea8dc9d9160048083019260209291908290030181600087803b1580156102d957600080fd5b505af11580156102ed573d6000803e3d6000fd5b505050506040513d602081101561030357600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201523060648201529051608480830192600092919082900301818387803b15801561038457600080fd5b505af1158015610398573d6000803e3d6000fd5b505050503394506103dd6040805190810160405280600481526020017f6f70656e000000000000000000000000000000000000000000000000000000008152506114a5565b604080517f746f6b656e2d77726170706572000000000000000000000000000000000000008152815190819003600d01812060208083019490945281830152815180820383018152606090910191829052805190928291908401908083835b6020831061047957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161043c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018290038220828501909452600682527f766f74696e670000000000000000000000000000000000000000000000000000908201529197506104ff93509091506114a59050565b92508673ffffffffffffffffffffffffffffffffffffffff166380cd5ac38561052787611242565b604080517c010000000000000000000000000000000000000000000000000000000063ffffffff8616028152600481019390935273ffffffffffffffffffffffffffffffffffffffff90911660248301525160448083019260209291908290030181600087803b15801561059a57600080fd5b505af11580156105ae573d6000803e3d6000fd5b505050506040513d60208110156105c457600080fd5b5051915073ffffffffffffffffffffffffffffffffffffffff87166380cd5ac3846105ee81611242565b604080517c010000000000000000000000000000000000000000000000000000000063ffffffff8616028152600481019390935273ffffffffffffffffffffffffffffffffffffffff90911660248301525160448083019260209291908290030181600087803b15801561066157600080fd5b505af1158015610675573d6000803e3d6000fd5b505050506040513d602081101561068b57600080fd5b5051604080517f9065714700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048084019190915260606024840152601160648401527f57726170706564206f726720746f6b656e000000000000000000000000000000608484015260a0604484015260a48301527f774f52470000000000000000000000000000000000000000000000000000000060c483015291519293509084169163906571479160e48082019260009290919082900301818387803b15801561076b57600080fd5b505af115801561077f573d6000803e3d6000fd5b5050604080517fdf3d330500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526706f05b59d3b2000060248301526702c68af0bb14000060448301526201518060648301529151918516935063df3d3305925060848082019260009290919082900301818387803b15801561081957600080fd5b505af115801561082d573d6000803e3d6000fd5b5050604080517fbe03847800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6004820181905286811660248301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604483015289811660648301529151918a16935063be038478925060848082019260009290919082900301818387803b1580156108d757600080fd5b505af11580156108eb573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff1663be0384787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff838473ffffffffffffffffffffffffffffffffffffffff1663be2c64d46040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561099157600080fd5b505af11580156109a5573d6000803e3d6000fd5b505050506040513d60208110156109bb57600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff94851660048201529284166024840152604483019190915291891660648201529051608480830192600092919082900301818387803b158015610a4057600080fd5b505af1158015610a54573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff16630a8ed3db86898a73ffffffffffffffffffffffffffffffffffffffff16638ea8dc9d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505050506040513d6020811015610b0457600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b158015610b7f57600080fd5b505af1158015610b93573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff16639d0effdb30898a73ffffffffffffffffffffffffffffffffffffffff16638ea8dc9d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610c1957600080fd5b505af1158015610c2d573d6000803e3d6000fd5b505050506040513d6020811015610c4357600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b158015610cbe57600080fd5b505af1158015610cd2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff1663afd925df86898a73ffffffffffffffffffffffffffffffffffffffff16638ea8dc9d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610d5857600080fd5b505af1158015610d6c573d6000803e3d6000fd5b505050506040513d6020811015610d8257600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b158015610dfd57600080fd5b505af1158015610e11573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff16630a8ed3db86888973ffffffffffffffffffffffffffffffffffffffff16633d6ab68f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610e9757600080fd5b505af1158015610eab573d6000803e3d6000fd5b505050506040513d6020811015610ec157600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b158015610f3c57600080fd5b505af1158015610f50573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff16639d0effdb30888973ffffffffffffffffffffffffffffffffffffffff16633d6ab68f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b505050506040513d602081101561100057600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff1663afd925df86888973ffffffffffffffffffffffffffffffffffffffff16633d6ab68f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561111557600080fd5b505af1158015611129573d6000803e3d6000fd5b505050506040513d602081101561113f57600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b1580156111ba57600080fd5b505af11580156111ce573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8b16815290517f8f42a14c9fe9e09f4fe8eeee69ae878731c838b6497425d4c30e1d09336cf34b9350908190036020019150a15050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60008054604080517f0178b8bf000000000000000000000000000000000000000000000000000000008152600481018590529051839273ffffffffffffffffffffffffffffffffffffffff1691630178b8bf91602480830192602092919082900301818787803b1580156112b557600080fd5b505af11580156112c9573d6000803e3d6000fd5b505050506040513d60208110156112df57600080fd5b5051604080517f3b3b57de00000000000000000000000000000000000000000000000000000000815260048101869052905173ffffffffffffffffffffffffffffffffffffffff90921691633b3b57de916024808201926020929091908290030181600087803b15801561135257600080fd5b505af1158015611366573d6000803e3d6000fd5b505050506040513d602081101561137c57600080fd5b5051604080517fc36af460000000000000000000000000000000000000000000000000000000008152905191925073ffffffffffffffffffffffffffffffffffffffff83169163c36af4609160048082019260009290919082900301818387803b1580156113e957600080fd5b505af11580156113fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405260a081101561144457600080fd5b6060820151608083018051919284019184919064010000000081111561146957600080fd5b8201602081018481111561147c57600080fd5b815164010000000081118282018710171561149657600080fd5b50949998505050505050505050565b60007f9065c3e7f7b7ef1ef4e53d2d0b8e0cef02874ab020c1ece79d5f0d3d0111c0ba600102826040518082805190602001908083835b6020831061151957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016114dc565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b602083106115cf57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611592565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990911692169190911790526040519201829003909120959450505050505600a165627a7a7230582082702bb3ba29cceb9b7ca33876e2d1e86e14a6634d1b42ef39c2bb3a4742f8a10029",
  "deployedBytecode": "0x6080604052600436106100615763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633f15457f81146100665780638b128f25146100a4578063c3b31472146100d4578063c6d2c717146100e9575b600080fd5b34801561007257600080fd5b5061007b610101565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156100b057600080fd5b506100d273ffffffffffffffffffffffffffffffffffffffff6004351661011d565b005b3480156100e057600080fd5b5061007b611226565b3480156100f557600080fd5b5061007b600435611242565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600154604080517f21687444000000000000000000000000000000000000000000000000000000008152306004820152905160009283928392839283928392839273ffffffffffffffffffffffffffffffffffffffff1691632168744491602480830192602092919082900301818787803b15801561019b57600080fd5b505af11580156101af573d6000803e3d6000fd5b505050506040513d60208110156101c557600080fd5b5051604080517fde287359000000000000000000000000000000000000000000000000000000008152905191985073ffffffffffffffffffffffffffffffffffffffff89169163de287359916004808201926020929091908290030181600087803b15801561023357600080fd5b505af1158015610247573d6000803e3d6000fd5b505050506040513d602081101561025d57600080fd5b5051604080517f8ea8dc9d000000000000000000000000000000000000000000000000000000008152905191975073ffffffffffffffffffffffffffffffffffffffff8089169263be0384789230928c9290831691638ea8dc9d9160048083019260209291908290030181600087803b1580156102d957600080fd5b505af11580156102ed573d6000803e3d6000fd5b505050506040513d602081101561030357600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201523060648201529051608480830192600092919082900301818387803b15801561038457600080fd5b505af1158015610398573d6000803e3d6000fd5b505050503394506103dd6040805190810160405280600481526020017f6f70656e000000000000000000000000000000000000000000000000000000008152506114a5565b604080517f746f6b656e2d77726170706572000000000000000000000000000000000000008152815190819003600d01812060208083019490945281830152815180820383018152606090910191829052805190928291908401908083835b6020831061047957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161043c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018290038220828501909452600682527f766f74696e670000000000000000000000000000000000000000000000000000908201529197506104ff93509091506114a59050565b92508673ffffffffffffffffffffffffffffffffffffffff166380cd5ac38561052787611242565b604080517c010000000000000000000000000000000000000000000000000000000063ffffffff8616028152600481019390935273ffffffffffffffffffffffffffffffffffffffff90911660248301525160448083019260209291908290030181600087803b15801561059a57600080fd5b505af11580156105ae573d6000803e3d6000fd5b505050506040513d60208110156105c457600080fd5b5051915073ffffffffffffffffffffffffffffffffffffffff87166380cd5ac3846105ee81611242565b604080517c010000000000000000000000000000000000000000000000000000000063ffffffff8616028152600481019390935273ffffffffffffffffffffffffffffffffffffffff90911660248301525160448083019260209291908290030181600087803b15801561066157600080fd5b505af1158015610675573d6000803e3d6000fd5b505050506040513d602081101561068b57600080fd5b5051604080517f9065714700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048084019190915260606024840152601160648401527f57726170706564206f726720746f6b656e000000000000000000000000000000608484015260a0604484015260a48301527f774f52470000000000000000000000000000000000000000000000000000000060c483015291519293509084169163906571479160e48082019260009290919082900301818387803b15801561076b57600080fd5b505af115801561077f573d6000803e3d6000fd5b5050604080517fdf3d330500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526706f05b59d3b2000060248301526702c68af0bb14000060448301526201518060648301529151918516935063df3d3305925060848082019260009290919082900301818387803b15801561081957600080fd5b505af115801561082d573d6000803e3d6000fd5b5050604080517fbe03847800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6004820181905286811660248301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604483015289811660648301529151918a16935063be038478925060848082019260009290919082900301818387803b1580156108d757600080fd5b505af11580156108eb573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff1663be0384787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff838473ffffffffffffffffffffffffffffffffffffffff1663be2c64d46040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561099157600080fd5b505af11580156109a5573d6000803e3d6000fd5b505050506040513d60208110156109bb57600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff94851660048201529284166024840152604483019190915291891660648201529051608480830192600092919082900301818387803b158015610a4057600080fd5b505af1158015610a54573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff16630a8ed3db86898a73ffffffffffffffffffffffffffffffffffffffff16638ea8dc9d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505050506040513d6020811015610b0457600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b158015610b7f57600080fd5b505af1158015610b93573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff16639d0effdb30898a73ffffffffffffffffffffffffffffffffffffffff16638ea8dc9d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610c1957600080fd5b505af1158015610c2d573d6000803e3d6000fd5b505050506040513d6020811015610c4357600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b158015610cbe57600080fd5b505af1158015610cd2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff1663afd925df86898a73ffffffffffffffffffffffffffffffffffffffff16638ea8dc9d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610d5857600080fd5b505af1158015610d6c573d6000803e3d6000fd5b505050506040513d6020811015610d8257600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b158015610dfd57600080fd5b505af1158015610e11573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff16630a8ed3db86888973ffffffffffffffffffffffffffffffffffffffff16633d6ab68f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610e9757600080fd5b505af1158015610eab573d6000803e3d6000fd5b505050506040513d6020811015610ec157600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b158015610f3c57600080fd5b505af1158015610f50573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff16639d0effdb30888973ffffffffffffffffffffffffffffffffffffffff16633d6ab68f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b505050506040513d602081101561100057600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff1663afd925df86888973ffffffffffffffffffffffffffffffffffffffff16633d6ab68f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561111557600080fd5b505af1158015611129573d6000803e3d6000fd5b505050506040513d602081101561113f57600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b1580156111ba57600080fd5b505af11580156111ce573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8b16815290517f8f42a14c9fe9e09f4fe8eeee69ae878731c838b6497425d4c30e1d09336cf34b9350908190036020019150a15050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60008054604080517f0178b8bf000000000000000000000000000000000000000000000000000000008152600481018590529051839273ffffffffffffffffffffffffffffffffffffffff1691630178b8bf91602480830192602092919082900301818787803b1580156112b557600080fd5b505af11580156112c9573d6000803e3d6000fd5b505050506040513d60208110156112df57600080fd5b5051604080517f3b3b57de00000000000000000000000000000000000000000000000000000000815260048101869052905173ffffffffffffffffffffffffffffffffffffffff90921691633b3b57de916024808201926020929091908290030181600087803b15801561135257600080fd5b505af1158015611366573d6000803e3d6000fd5b505050506040513d602081101561137c57600080fd5b5051604080517fc36af460000000000000000000000000000000000000000000000000000000008152905191925073ffffffffffffffffffffffffffffffffffffffff83169163c36af4609160048082019260009290919082900301818387803b1580156113e957600080fd5b505af11580156113fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405260a081101561144457600080fd5b6060820151608083018051919284019184919064010000000081111561146957600080fd5b8201602081018481111561147c57600080fd5b815164010000000081118282018710171561149657600080fd5b50949998505050505050505050565b60007f9065c3e7f7b7ef1ef4e53d2d0b8e0cef02874ab020c1ece79d5f0d3d0111c0ba600102826040518082805190602001908083835b6020831061151957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016114dc565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b602083106115cf57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611592565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990911692169190911790526040519201829003909120959450505050505600a165627a7a7230582082702bb3ba29cceb9b7ca33876e2d1e86e14a6634d1b42ef39c2bb3a4742f8a10029",
  "sourceMap": "1184:1881:1:-;;;1315:68;8:9:-1;5:2;;;30:1;27;20:12;5:2;1315:68:1;;;;;;;;;;;;;1360:1;650:10;;-1:-1:-1;;;;;650:10:1;;-1:-1:-1;;;;;;650:10:1;;;;;;1315:68;1360:1;802:23;;;;;;;;;;;;;;;;;;;:11;;;;:23;:::i;:::-;784:41;-1:-1:-1;858:29:1;784:41;858:20;;;;:29;:::i;:::-;-1:-1:-1;;;;;845:47:1;;:49;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;845:49:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;845:49:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;845:49:1;839:3;:55;;-1:-1:-1;;;;;;839:55:1;-1:-1:-1;;;;;839:55:1;;;;;;;;;594:358;;;1315:68;1184:1881;;379:151:15;436:7;306:66;489:8;;515:4;499:22;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;499:22:15;;;;;;;;;;;;472:50;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;472:50:15;;;;;;;;462:61;;472:50;;;;-1:-1:-1;472:50:15;;-1:-1:-1;462:61:15;;;;;-1:-1:-1;462:61:15;472:50;462:61;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;462:61:15;;;;;;;;;;;;-1:-1:-1;;;;;379:151:15:o;958:221:1:-;1024:12;1080:3;;:19;;;;;;;;;;;;;;1024:12;;-1:-1:-1;;;;;1080:3:1;;:12;;:19;;;;;;;;;;;;;;1024:12;1080:3;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;1080:19:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1080:19:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1080:19:1;1065:47;;;;;;;;;;;;;;-1:-1:-1;;;;;1065:40:1;;;;;;:47;;;;;1080:19;;1065:47;;;;;;;;;:40;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;1065:47:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1065:47:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1065:47:1;1134:16;;;;;;;;1065:47;;-1:-1:-1;;;;;;1134:14:1;;;;;:16;;;;;;;;;;;;;;;;:14;:16;;;5:2:-1;;;;30:1;27;20:12;5:2;1134:16:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1134:16:1;;;;;;39::-1;36:1;17:17;2:54;101:4;1134:16:1;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:3;5:12;;2:2;;;30:1;27;20:12;2:2;1134:16:1;;;;;;;;;;;;;;;;;20:11:-1;12:20;;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;218:10;;268:11;251:29;;293:43;;;290:58;-1:-1;239:118;236:2;;;370:1;367;360:12;236:2;-1:-1;1123:27:1;;958:221;-1:-1:-1;;;;;;;;;958:221:1:o;1184:1881::-;;;;;;;",
  "deployedSourceMap": "1184:1881:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;449:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;449:14:1;;;;;;;;;;;;;;;;;;;;;;;1389:1674;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1389:1674:1;;;;;;;;;469:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;469:21:1;;;;958:221;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;958:221:1;;;;;449:14;;;;;;:::o;1389:1674::-;1463:3;;:16;;;;;;1474:4;1463:16;;;;;;1450:10;;;;;;;;;;;;;;1463:3;;;:10;;:16;;;;;;;;;;;;;;1450:10;1463:3;:16;;;5:2:-1;;;;30:1;27;20:12;5:2;1463:16:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1463:16:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1463:16:1;1503:9;;;;;;;;1463:16;;-1:-1:-1;1503:7:1;;;;;;:9;;;;;1463:16;;1503:9;;;;;;;;;:7;:9;;;5:2:-1;;;;30:1;27;20:12;5:2;1503:9:1;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1503:9:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1503:9:1;1555:22;;;;;;;;1503:9;;-1:-1:-1;1523:20:1;;;;;;;1544:4;;1550:3;;1555:20;;;;;;:22;;;;;1503:9;;1555:22;;;;;;;;:20;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;1555:22:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1555:22:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1555:22:1;1523:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1579:4;1523:61;;;;;;;;;;;-1:-1:-1;;1523:61:1;;;;;;;-1:-1:-1;1523:61:1;;;;5:2:-1;;;;30:1;27;20:12;5:2;1523:61:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1523:61:1;;;;1610:10;1595:25;;1685:19;;;;;;;;;;;;;;;;;;;:11;:19::i;:::-;1706:26;;;;;;;;;;;;;;;;1668:65;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;1668:65:1;;;;;;;;1658:76;;1668:65;;;;1658:76;;;;;1668:65;1658:76;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;1658:76:1;;;;;;;;;;;;1766:21;;;;;;;;;;;;;;1658:76;;-1:-1:-1;1766:21:1;;-1:-1:-1;1658:76:1;;-1:-1:-1;1766:11:1;;-1:-1:-1;1766:21:1:i;:::-;1744:43;;1839:3;:18;;;1858:17;1877:39;1898:17;1877:20;:39::i;:::-;1839:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;1839:78:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1839:78:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1839:78:1;;-1:-1:-1;1951:18:1;;;;1970:11;1983:33;1970:11;1983:20;:33::i;:::-;1951:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;1951:66:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1951:66:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1951:66:1;2056:69;;;;;;:23;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1951:66;;-1:-1:-1;2056:23:1;;;;;;:69;;;;;-1:-1:-1;;2056:69:1;;;;;;;;-1:-1:-1;2056:23:1;:69;;;5:2:-1;;;;30:1;27;20:12;5:2;2056:69:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2135:86:1;;;;;;:44;:86;;;;;;;2194:8;2135:86;;;;2204:8;2135:86;;;;2214:6;2135:86;;;;;;:44;;;;-1:-1:-1;2135:44:1;;-1:-1:-1;2135:86:1;;;;;-1:-1:-1;;2135:86:1;;;;;;;;-1:-1:-1;2135:44:1;:86;;;5:2:-1;;;;30:1;27;20:12;5:2;2135:86:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2419:66:1;;;;;;:20;:66;;;;;;;;;;;;;2448:2;2419:66;;;;;;;;;;;;;:20;;;;-1:-1:-1;2419:20:1;;-1:-1:-1;2419:66:1;;;;;-1:-1:-1;;2419:66:1;;;;;;;;-1:-1:-1;2419:20:1;:66;;;5:2:-1;;;;30:1;27;20:12;5:2;2419:66:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2419:66:1;;;;2496:3;:20;;;1305:2;2529:6;2537;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2537:26:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2537:26:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2537:26:1;2496:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2496:74:1;;;;;;;-1:-1:-1;2496:74:1;;;;5:2:-1;;;;30:1;27;20:12;5:2;2496:74:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2496:74:1;;;;2613:3;:19;;;2633:4;2639:3;2644;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2644:22:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2644:22:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2644:22:1;2613:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2613:54:1;;;;;;;-1:-1:-1;2613:54:1;;;;5:2:-1;;;;30:1;27;20:12;5:2;2613:54:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2613:54:1;;;;2677:3;:20;;;2698:4;2704:3;2709;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2709:22:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2709:22:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2709:22:1;2677:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2677:55:1;;;;;;;-1:-1:-1;2677:55:1;;;;5:2:-1;;;;30:1;27;20:12;5:2;2677:55:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2677:55:1;;;;2742:3;:24;;;2767:4;2773:3;2778;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2778:22:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2778:22:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2778:22:1;2742:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2742:59:1;;;;;;;-1:-1:-1;2742:59:1;;;;5:2:-1;;;;30:1;27;20:12;5:2;2742:59:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2742:59:1;;;;2812:3;:19;;;2832:4;2838:3;2843;:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2843:29:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2843:29:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2843:29:1;2812:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2812:61:1;;;;;;;-1:-1:-1;2812:61:1;;;;5:2:-1;;;;30:1;27;20:12;5:2;2812:61:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2812:61:1;;;;2883:3;:20;;;2904:4;2910:3;2915;:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2915:29:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2915:29:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2915:29:1;2883:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2883:62:1;;;;;;;-1:-1:-1;2883:62:1;;;;5:2:-1;;;;30:1;27;20:12;5:2;2883:62:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2883:62:1;;;;2955:3;:24;;;2980:4;2986:3;2991;:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2991:29:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2991:29:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2991:29:1;2955:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2955:66:1;;;;;;;-1:-1:-1;2955:66:1;;;;5:2:-1;;;;30:1;27;20:12;5:2;2955:66:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3037:19:1;;;;;;;;;;;;-1:-1:-1;3037:19:1;;;;;;;-1:-1:-1;3037:19:1;1389:1674;;;;;;;;:::o;469:21::-;;;;;;:::o;958:221::-;1024:12;1080:3;;:19;;;;;;;;;;;;;;1024:12;;1080:3;;;:12;;:19;;;;;;;;;;;;;;1024:12;1080:3;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;1080:19:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1080:19:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1080:19:1;1065:47;;;;;;;;;;;;;;:40;;;;;;;:47;;;;;1080:19;;1065:47;;;;;;;;;:40;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;1065:47:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1065:47:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1065:47:1;1134:16;;;;;;;;1065:47;;-1:-1:-1;1134:14:1;;;;;;:16;;;;;;;;;;;;;;;;:14;:16;;;5:2:-1;;;;30:1;27;20:12;5:2;1134:16:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1134:16:1;;;;;;39::-1;36:1;17:17;2:54;101:4;1134:16:1;80:15:-1;;;97:9;76:31;65:43;;120:4;113:20;13:3;5:12;;2:2;;;30:1;27;20:12;2:2;1134:16:1;;;;;;;;;;;;;;;;;20:11:-1;12:20;;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;218:10;;268:11;251:29;;293:43;;;290:58;-1:-1;239:118;236:2;;;370:1;367;360:12;236:2;-1:-1;1123:27:1;;958:221;-1:-1:-1;;;;;;;;;958:221:1:o;379:151:15:-;436:7;306:66;489:8;;515:4;499:22;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;499:22:15;;;;;;;;;;;;472:50;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;472:50:15;;;;;;;;462:61;;472:50;;;;-1:-1:-1;472:50:15;;-1:-1:-1;462:61:15;;;;;-1:-1:-1;462:61:15;472:50;462:61;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;;;;365:33;;462:61:15;;;;;;;;;;;;-1:-1:-1;;;;;379:151:15:o",
  "source": "pragma solidity 0.4.24;\n\nimport \"@aragon/os/contracts/factory/DAOFactory.sol\";\nimport \"@aragon/os/contracts/apm/Repo.sol\";\nimport \"@aragon/os/contracts/lib/ens/ENS.sol\";\nimport \"@aragon/os/contracts/lib/ens/PublicResolver.sol\";\nimport \"@aragon/os/contracts/apm/APMNamehash.sol\";\n\nimport \"@aragon/apps-voting/contracts/Voting.sol\";\n\nimport \"../TokenWrapper.sol\";\nimport \"./IVotingGenericInitializer.sol\";\n\n\ncontract TemplateBase is APMNamehash {\n    ENS public ens;\n    DAOFactory public fac;\n\n    event DeployInstance(address dao);\n    event InstalledApp(address appProxy, bytes32 appId);\n\n    constructor(DAOFactory _fac, ENS _ens) public {\n        ens = _ens;\n\n        // If no factory is passed, get it from on-chain bare-kit\n        if (address(_fac) == address(0)) {\n            bytes32 bareKit = apmNamehash(\"bare-kit\");\n            fac = TemplateBase(latestVersionAppBase(bareKit)).fac();\n        } else {\n            fac = _fac;\n        }\n    }\n\n    function latestVersionAppBase(bytes32 appId) public view returns (address base) {\n        Repo repo = Repo(PublicResolver(ens.resolver(appId)).addr(appId));\n        (,base,) = repo.getLatest();\n\n        return base;\n    }\n}\n\n\ncontract ExampleTemplate is TemplateBase {\n    uint64 constant PCT = 10 ** 16;\n    address constant ANY_ENTITY = address(-1);\n\n    constructor(ENS ens) TemplateBase(DAOFactory(0), ens) public {\n    }\n\n    function newInstance(ERC20 _depositedToken) public {\n        Kernel dao = fac.newDAO(this);\n        ACL acl = ACL(dao.acl());\n        acl.createPermission(this, dao, dao.APP_MANAGER_ROLE(), this);\n\n        address root = msg.sender;\n        bytes32 tokenWrapperAppId = keccak256(abi.encodePacked(apmNamehash(\"open\"), keccak256(\"token-wrapper\")));\n        bytes32 votingAppId = apmNamehash(\"voting\");\n\n        TokenWrapper tokenWrapper = TokenWrapper(dao.newAppInstance(tokenWrapperAppId, latestVersionAppBase(tokenWrapperAppId)));\n        Voting voting = Voting(dao.newAppInstance(votingAppId, latestVersionAppBase(votingAppId)));\n\n        // Initialize apps\n        tokenWrapper.initialize(_depositedToken, \"Wrapped org token\", \"wORG\");\n        IVotingGenericInitializer(voting).initialize(tokenWrapper, 50 * PCT, 20 * PCT, 1 days);\n\n        // HACK: create a random permission on TokenWrapper so it is detected as an app\n        // Allow root to remove this permission if they'd like to uninstall this app in the future\n        acl.createPermission(address(-1), tokenWrapper, bytes32(-1), root);\n\n        acl.createPermission(ANY_ENTITY, voting, voting.CREATE_VOTES_ROLE(), root);\n\n        // Clean up permissions\n        acl.grantPermission(root, dao, dao.APP_MANAGER_ROLE());\n        acl.revokePermission(this, dao, dao.APP_MANAGER_ROLE());\n        acl.setPermissionManager(root, dao, dao.APP_MANAGER_ROLE());\n\n        acl.grantPermission(root, acl, acl.CREATE_PERMISSIONS_ROLE());\n        acl.revokePermission(this, acl, acl.CREATE_PERMISSIONS_ROLE());\n        acl.setPermissionManager(root, acl, acl.CREATE_PERMISSIONS_ROLE());\n\n        emit DeployInstance(dao);\n    }\n}\n",
  "sourcePath": "/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/examples/ExampleTemplate.sol",
  "ast": {
    "absolutePath": "/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/examples/ExampleTemplate.sol",
    "exportedSymbols": {
      "ExampleTemplate": [
        777
      ],
      "TemplateBase": [
        558
      ]
    },
    "id": 778,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 460,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:1"
      },
      {
        "absolutePath": "@aragon/os/contracts/factory/DAOFactory.sol",
        "file": "@aragon/os/contracts/factory/DAOFactory.sol",
        "id": 461,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 8071,
        "src": "25:53:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/apm/Repo.sol",
        "file": "@aragon/os/contracts/apm/Repo.sol",
        "id": 462,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 5741,
        "src": "79:43:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/ens/ENS.sol",
        "file": "@aragon/os/contracts/lib/ens/ENS.sol",
        "id": 463,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 9089,
        "src": "123:46:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/ens/PublicResolver.sol",
        "file": "@aragon/os/contracts/lib/ens/PublicResolver.sol",
        "id": 464,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 9551,
        "src": "170:57:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/apm/APMNamehash.sol",
        "file": "@aragon/os/contracts/apm/APMNamehash.sol",
        "id": 465,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 5348,
        "src": "228:50:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/apps-voting/contracts/Voting.sol",
        "file": "@aragon/apps-voting/contracts/Voting.sol",
        "id": 466,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 3489,
        "src": "280:50:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/TokenWrapper.sol",
        "file": "../TokenWrapper.sol",
        "id": 467,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 459,
        "src": "332:29:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/examples/IVotingGenericInitializer.sol",
        "file": "./IVotingGenericInitializer.sol",
        "id": 468,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 794,
        "src": "362:41:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 469,
              "name": "APMNamehash",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5347,
              "src": "431:11:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_APMNamehash_$5347",
                "typeString": "contract APMNamehash"
              }
            },
            "id": 470,
            "nodeType": "InheritanceSpecifier",
            "src": "431:11:1"
          }
        ],
        "contractDependencies": [
          5347
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 558,
        "linearizedBaseContracts": [
          558,
          5347
        ],
        "name": "TemplateBase",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 472,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 558,
            "src": "449:14:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$9088",
              "typeString": "contract ENS"
            },
            "typeName": {
              "contractScope": null,
              "id": 471,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9088,
              "src": "449:3:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$9088",
                "typeString": "contract ENS"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 474,
            "name": "fac",
            "nodeType": "VariableDeclaration",
            "scope": 558,
            "src": "469:21:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DAOFactory_$8070",
              "typeString": "contract DAOFactory"
            },
            "typeName": {
              "contractScope": null,
              "id": 473,
              "name": "DAOFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8070,
              "src": "469:10:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DAOFactory_$8070",
                "typeString": "contract DAOFactory"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 478,
            "name": "DeployInstance",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 477,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 476,
                  "indexed": false,
                  "name": "dao",
                  "nodeType": "VariableDeclaration",
                  "scope": 478,
                  "src": "518:11:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 475,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "518:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "517:13:1"
            },
            "src": "497:34:1"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 484,
            "name": "InstalledApp",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 480,
                  "indexed": false,
                  "name": "appProxy",
                  "nodeType": "VariableDeclaration",
                  "scope": 484,
                  "src": "555:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 479,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "555:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 482,
                  "indexed": false,
                  "name": "appId",
                  "nodeType": "VariableDeclaration",
                  "scope": 484,
                  "src": "573:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 481,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "573:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "554:33:1"
            },
            "src": "536:52:1"
          },
          {
            "body": {
              "id": 525,
              "nodeType": "Block",
              "src": "640:312:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 491,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 472,
                      "src": "650:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$9088",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 492,
                      "name": "_ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 488,
                      "src": "656:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$9088",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "650:10:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$9088",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 494,
                  "nodeType": "ExpressionStatement",
                  "src": "650:10:1"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 496,
                          "name": "_fac",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 486,
                          "src": "749:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DAOFactory_$8070",
                            "typeString": "contract DAOFactory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DAOFactory_$8070",
                            "typeString": "contract DAOFactory"
                          }
                        ],
                        "id": 495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "741:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "741:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "766:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 498,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "758:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 500,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "758:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "741:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 523,
                    "nodeType": "Block",
                    "src": "911:35:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 519,
                            "name": "fac",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 474,
                            "src": "925:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOFactory_$8070",
                              "typeString": "contract DAOFactory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 520,
                            "name": "_fac",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 486,
                            "src": "931:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOFactory_$8070",
                              "typeString": "contract DAOFactory"
                            }
                          },
                          "src": "925:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DAOFactory_$8070",
                            "typeString": "contract DAOFactory"
                          }
                        },
                        "id": 522,
                        "nodeType": "ExpressionStatement",
                        "src": "925:10:1"
                      }
                    ]
                  },
                  "id": 524,
                  "nodeType": "IfStatement",
                  "src": "737:209:1",
                  "trueBody": {
                    "id": 518,
                    "nodeType": "Block",
                    "src": "770:135:1",
                    "statements": [
                      {
                        "assignments": [
                          503
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 503,
                            "name": "bareKit",
                            "nodeType": "VariableDeclaration",
                            "scope": 526,
                            "src": "784:15:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 502,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "784:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 507,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "626172652d6b6974",
                              "id": 505,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "814:10:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_eae34e1d5adf3d84ddaf56c05425677b54d69a021ff0c01c8b5f2289b91a4e9f",
                                "typeString": "literal_string \"bare-kit\""
                              },
                              "value": "bare-kit"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_eae34e1d5adf3d84ddaf56c05425677b54d69a021ff0c01c8b5f2289b91a4e9f",
                                "typeString": "literal_string \"bare-kit\""
                              }
                            ],
                            "id": 504,
                            "name": "apmNamehash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5346,
                            "src": "802:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (string memory) pure returns (bytes32)"
                            }
                          },
                          "id": 506,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "802:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "784:41:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 508,
                            "name": "fac",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 474,
                            "src": "839:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOFactory_$8070",
                              "typeString": "contract DAOFactory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 511,
                                        "name": "bareKit",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 503,
                                        "src": "879:7:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 510,
                                      "name": "latestVersionAppBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 557,
                                      "src": "858:20:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                                        "typeString": "function (bytes32) view returns (address)"
                                      }
                                    },
                                    "id": 512,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "858:29:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 509,
                                  "name": "TemplateBase",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 558,
                                  "src": "845:12:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_TemplateBase_$558_$",
                                    "typeString": "type(contract TemplateBase)"
                                  }
                                },
                                "id": 513,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "845:43:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_TemplateBase_$558",
                                  "typeString": "contract TemplateBase"
                                }
                              },
                              "id": 514,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "fac",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 474,
                              "src": "845:47:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOFactory_$8070_$",
                                "typeString": "function () view external returns (contract DAOFactory)"
                              }
                            },
                            "id": 515,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "845:49:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOFactory_$8070",
                              "typeString": "contract DAOFactory"
                            }
                          },
                          "src": "839:55:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DAOFactory_$8070",
                            "typeString": "contract DAOFactory"
                          }
                        },
                        "id": 517,
                        "nodeType": "ExpressionStatement",
                        "src": "839:55:1"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 526,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 489,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 486,
                  "name": "_fac",
                  "nodeType": "VariableDeclaration",
                  "scope": 526,
                  "src": "606:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DAOFactory_$8070",
                    "typeString": "contract DAOFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 485,
                    "name": "DAOFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8070,
                    "src": "606:10:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DAOFactory_$8070",
                      "typeString": "contract DAOFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 488,
                  "name": "_ens",
                  "nodeType": "VariableDeclaration",
                  "scope": 526,
                  "src": "623:8:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$9088",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 487,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9088,
                    "src": "623:3:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$9088",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "605:27:1"
            },
            "payable": false,
            "returnParameters": {
              "id": 490,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "640:0:1"
            },
            "scope": 558,
            "src": "594:358:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 556,
              "nodeType": "Block",
              "src": "1038:141:1",
              "statements": [
                {
                  "assignments": [
                    534
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 534,
                      "name": "repo",
                      "nodeType": "VariableDeclaration",
                      "scope": 557,
                      "src": "1048:9:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Repo_$5740",
                        "typeString": "contract Repo"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 533,
                        "name": "Repo",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5740,
                        "src": "1048:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Repo_$5740",
                          "typeString": "contract Repo"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 546,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 543,
                            "name": "appId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 528,
                            "src": "1106:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 539,
                                    "name": "appId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 528,
                                    "src": "1093:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 537,
                                    "name": "ens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 472,
                                    "src": "1080:3:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ENS_$9088",
                                      "typeString": "contract ENS"
                                    }
                                  },
                                  "id": 538,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "resolver",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8973,
                                  "src": "1080:12:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                                    "typeString": "function (bytes32) view external returns (address)"
                                  }
                                },
                                "id": 540,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1080:19:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 536,
                              "name": "PublicResolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9550,
                              "src": "1065:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PublicResolver_$9550_$",
                                "typeString": "type(contract PublicResolver)"
                              }
                            },
                            "id": 541,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1065:35:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PublicResolver_$9550",
                              "typeString": "contract PublicResolver"
                            }
                          },
                          "id": 542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "addr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9256,
                          "src": "1065:40:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 544,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1065:47:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 535,
                      "name": "Repo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5740,
                      "src": "1060:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Repo_$5740_$",
                        "typeString": "type(contract Repo)"
                      }
                    },
                    "id": 545,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1060:53:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Repo_$5740",
                      "typeString": "contract Repo"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1048:65:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        null,
                        {
                          "argumentTypes": null,
                          "id": 547,
                          "name": "base",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 531,
                          "src": "1125:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        null
                      ],
                      "id": 548,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "1123:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$_t_address_$__$",
                        "typeString": "tuple(,address,)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 549,
                          "name": "repo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 534,
                          "src": "1134:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Repo_$5740",
                            "typeString": "contract Repo"
                          }
                        },
                        "id": 550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getLatest",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5544,
                        "src": "1134:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_array$_t_uint16_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$",
                          "typeString": "function () view external returns (uint16[3] memory,address,bytes memory)"
                        }
                      },
                      "id": 551,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1134:16:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_array$_t_uint16_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(uint16[3] memory,address,bytes memory)"
                      }
                    },
                    "src": "1123:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 553,
                  "nodeType": "ExpressionStatement",
                  "src": "1123:27:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 554,
                    "name": "base",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 531,
                    "src": "1168:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 532,
                  "id": 555,
                  "nodeType": "Return",
                  "src": "1161:11:1"
                }
              ]
            },
            "documentation": null,
            "id": 557,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "latestVersionAppBase",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 529,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 528,
                  "name": "appId",
                  "nodeType": "VariableDeclaration",
                  "scope": 557,
                  "src": "988:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 527,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "988:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "987:15:1"
            },
            "payable": false,
            "returnParameters": {
              "id": 532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 531,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 557,
                  "src": "1024:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 530,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1024:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1023:14:1"
            },
            "scope": 558,
            "src": "958:221:1",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 778,
        "src": "406:775:1"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 559,
              "name": "TemplateBase",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 558,
              "src": "1212:12:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TemplateBase_$558",
                "typeString": "contract TemplateBase"
              }
            },
            "id": 560,
            "nodeType": "InheritanceSpecifier",
            "src": "1212:12:1"
          }
        ],
        "contractDependencies": [
          558,
          5347
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 777,
        "linearizedBaseContracts": [
          777,
          558,
          5347
        ],
        "name": "ExampleTemplate",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 565,
            "name": "PCT",
            "nodeType": "VariableDeclaration",
            "scope": 777,
            "src": "1231:30:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 561,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1231:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_rational_10000000000000000_by_1",
                "typeString": "int_const 10000000000000000"
              },
              "id": 564,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "hexValue": "3130",
                "id": 562,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1253:2:1",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_10_by_1",
                  "typeString": "int_const 10"
                },
                "value": "10"
              },
              "nodeType": "BinaryOperation",
              "operator": "**",
              "rightExpression": {
                "argumentTypes": null,
                "hexValue": "3136",
                "id": 563,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1259:2:1",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_16_by_1",
                  "typeString": "int_const 16"
                },
                "value": "16"
              },
              "src": "1253:8:1",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_10000000000000000_by_1",
                "typeString": "int_const 10000000000000000"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 571,
            "name": "ANY_ENTITY",
            "nodeType": "VariableDeclaration",
            "scope": 777,
            "src": "1267:41:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 566,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1267:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 569,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1305:2:1",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1306:1:1",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 567,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1297:7:1",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": "address"
              },
              "id": 570,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1297:11:1",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "body": {
              "id": 582,
              "nodeType": "Block",
              "src": "1376:7:1",
              "statements": []
            },
            "documentation": null,
            "id": 583,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 577,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1360:1:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 576,
                      "name": "DAOFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8070,
                      "src": "1349:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_DAOFactory_$8070_$",
                        "typeString": "type(contract DAOFactory)"
                      }
                    },
                    "id": 578,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1349:13:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DAOFactory_$8070",
                      "typeString": "contract DAOFactory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 579,
                    "name": "ens",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 573,
                    "src": "1364:3:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$9088",
                      "typeString": "contract ENS"
                    }
                  }
                ],
                "id": 580,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 575,
                  "name": "TemplateBase",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 558,
                  "src": "1336:12:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_TemplateBase_$558_$",
                    "typeString": "type(contract TemplateBase)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1336:32:1"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 574,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 573,
                  "name": "ens",
                  "nodeType": "VariableDeclaration",
                  "scope": 583,
                  "src": "1327:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$9088",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 572,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9088,
                    "src": "1327:3:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$9088",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1326:9:1"
            },
            "payable": false,
            "returnParameters": {
              "id": 581,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1376:0:1"
            },
            "scope": 777,
            "src": "1315:68:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 775,
              "nodeType": "Block",
              "src": "1440:1623:1",
              "statements": [
                {
                  "assignments": [
                    589
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 589,
                      "name": "dao",
                      "nodeType": "VariableDeclaration",
                      "scope": 776,
                      "src": "1450:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Kernel_$8723",
                        "typeString": "contract Kernel"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 588,
                        "name": "Kernel",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 8723,
                        "src": "1450:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 594,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 592,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10553,
                        "src": "1474:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 590,
                        "name": "fac",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 474,
                        "src": "1463:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DAOFactory_$8070",
                          "typeString": "contract DAOFactory"
                        }
                      },
                      "id": 591,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "newDAO",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8069,
                      "src": "1463:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_contract$_Kernel_$8723_$",
                        "typeString": "function (address) external returns (contract Kernel)"
                      }
                    },
                    "id": 593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1463:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Kernel_$8723",
                      "typeString": "contract Kernel"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1450:29:1"
                },
                {
                  "assignments": [
                    596
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 596,
                      "name": "acl",
                      "nodeType": "VariableDeclaration",
                      "scope": 776,
                      "src": "1489:7:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ACL_$4783",
                        "typeString": "contract ACL"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 595,
                        "name": "ACL",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4783,
                        "src": "1489:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 602,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 598,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "1503:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$8723",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "acl",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8593,
                          "src": "1503:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IACL_$5304_$",
                            "typeString": "function () view external returns (contract IACL)"
                          }
                        },
                        "id": 600,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1503:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IACL_$5304",
                          "typeString": "contract IACL"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IACL_$5304",
                          "typeString": "contract IACL"
                        }
                      ],
                      "id": 597,
                      "name": "ACL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4783,
                      "src": "1499:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ACL_$4783_$",
                        "typeString": "type(contract ACL)"
                      }
                    },
                    "id": 601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1499:14:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ACL_$4783",
                      "typeString": "contract ACL"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1489:24:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 606,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10553,
                        "src": "1544:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 607,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 589,
                        "src": "1550:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 608,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "1555:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$8723",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "APP_MANAGER_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8265,
                          "src": "1555:20:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 610,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1555:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 611,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10553,
                        "src": "1579:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        },
                        {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 603,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "1523:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 605,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3709,
                      "src": "1523:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1523:61:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 613,
                  "nodeType": "ExpressionStatement",
                  "src": "1523:61:1"
                },
                {
                  "assignments": [
                    615
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 615,
                      "name": "root",
                      "nodeType": "VariableDeclaration",
                      "scope": 776,
                      "src": "1595:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 614,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1595:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 618,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 616,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10404,
                      "src": "1610:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1610:10:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1595:25:1"
                },
                {
                  "assignments": [
                    620
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 620,
                      "name": "tokenWrapperAppId",
                      "nodeType": "VariableDeclaration",
                      "scope": 776,
                      "src": "1630:25:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 619,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1630:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 632,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "6f70656e",
                                "id": 625,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1697:6:1",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_99f30275ab70dd1890c0789c4570632b6f0b0284d11c2d9e587d0368f7027018",
                                  "typeString": "literal_string \"open\""
                                },
                                "value": "open"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_99f30275ab70dd1890c0789c4570632b6f0b0284d11c2d9e587d0368f7027018",
                                  "typeString": "literal_string \"open\""
                                }
                              ],
                              "id": 624,
                              "name": "apmNamehash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5346,
                              "src": "1685:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (string memory) pure returns (bytes32)"
                              }
                            },
                            "id": 626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1685:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "746f6b656e2d77726170706572",
                                "id": 628,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1716:15:1",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_13d51246a8c5d02e48f49067b9cafdc362643289cc6977f9d9b08adc81a50624",
                                  "typeString": "literal_string \"token-wrapper\""
                                },
                                "value": "token-wrapper"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_13d51246a8c5d02e48f49067b9cafdc362643289cc6977f9d9b08adc81a50624",
                                  "typeString": "literal_string \"token-wrapper\""
                                }
                              ],
                              "id": 627,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10398,
                              "src": "1706:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 629,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1706:26:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 622,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10391,
                            "src": "1668:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1668:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 630,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1668:65:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 621,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10398,
                      "src": "1658:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1658:76:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1630:104:1"
                },
                {
                  "assignments": [
                    634
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 634,
                      "name": "votingAppId",
                      "nodeType": "VariableDeclaration",
                      "scope": 776,
                      "src": "1744:19:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 633,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1744:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 638,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "766f74696e67",
                        "id": 636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1778:8:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0e49311626a26ba5be58a3b13d239908e80ce0dffdd5c50bf1d9c82ff35d1ab3",
                          "typeString": "literal_string \"voting\""
                        },
                        "value": "voting"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_0e49311626a26ba5be58a3b13d239908e80ce0dffdd5c50bf1d9c82ff35d1ab3",
                          "typeString": "literal_string \"voting\""
                        }
                      ],
                      "id": 635,
                      "name": "apmNamehash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5346,
                      "src": "1766:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (string memory) pure returns (bytes32)"
                      }
                    },
                    "id": 637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1766:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1744:43:1"
                },
                {
                  "assignments": [
                    640
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 640,
                      "name": "tokenWrapper",
                      "nodeType": "VariableDeclaration",
                      "scope": 776,
                      "src": "1798:25:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TokenWrapper_$458",
                        "typeString": "contract TokenWrapper"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 639,
                        "name": "TokenWrapper",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 458,
                        "src": "1798:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TokenWrapper_$458",
                          "typeString": "contract TokenWrapper"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 650,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 644,
                            "name": "tokenWrapperAppId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 620,
                            "src": "1858:17:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 646,
                                "name": "tokenWrapperAppId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 620,
                                "src": "1898:17:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 645,
                              "name": "latestVersionAppBase",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 557,
                              "src": "1877:20:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (bytes32) view returns (address)"
                              }
                            },
                            "id": 647,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1877:39:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 642,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "1839:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$8723",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "newAppInstance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8357,
                          "src": "1839:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$_t_contract$_ERCProxy_$9856_$",
                            "typeString": "function (bytes32,address) external returns (contract ERCProxy)"
                          }
                        },
                        "id": 648,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1839:78:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERCProxy_$9856",
                          "typeString": "contract ERCProxy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERCProxy_$9856",
                          "typeString": "contract ERCProxy"
                        }
                      ],
                      "id": 641,
                      "name": "TokenWrapper",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 458,
                      "src": "1826:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_TokenWrapper_$458_$",
                        "typeString": "type(contract TokenWrapper)"
                      }
                    },
                    "id": 649,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1826:92:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TokenWrapper_$458",
                      "typeString": "contract TokenWrapper"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1798:120:1"
                },
                {
                  "assignments": [
                    652
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 652,
                      "name": "voting",
                      "nodeType": "VariableDeclaration",
                      "scope": 776,
                      "src": "1928:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Voting_$3488",
                        "typeString": "contract Voting"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 651,
                        "name": "Voting",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3488,
                        "src": "1928:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Voting_$3488",
                          "typeString": "contract Voting"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 662,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 656,
                            "name": "votingAppId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 634,
                            "src": "1970:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 658,
                                "name": "votingAppId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 634,
                                "src": "2004:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 657,
                              "name": "latestVersionAppBase",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 557,
                              "src": "1983:20:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (bytes32) view returns (address)"
                              }
                            },
                            "id": 659,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1983:33:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 654,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "1951:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$8723",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "newAppInstance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8357,
                          "src": "1951:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$_t_contract$_ERCProxy_$9856_$",
                            "typeString": "function (bytes32,address) external returns (contract ERCProxy)"
                          }
                        },
                        "id": 660,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1951:66:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERCProxy_$9856",
                          "typeString": "contract ERCProxy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERCProxy_$9856",
                          "typeString": "contract ERCProxy"
                        }
                      ],
                      "id": 653,
                      "name": "Voting",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3488,
                      "src": "1944:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Voting_$3488_$",
                        "typeString": "type(contract Voting)"
                      }
                    },
                    "id": 661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1944:74:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Voting_$3488",
                      "typeString": "contract Voting"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1928:90:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 666,
                        "name": "_depositedToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 585,
                        "src": "2080:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$9925",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "57726170706564206f726720746f6b656e",
                        "id": 667,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2097:19:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ae5633a20cefad0fe719416c8d177abd91a67e277d82002c059c6d54b7c39980",
                          "typeString": "literal_string \"Wrapped org token\""
                        },
                        "value": "Wrapped org token"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "774f5247",
                        "id": 668,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2118:6:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_46fabe4ace633b4e922dbe6be1939267be21ac1d268cd76aaee20968f27bd7bc",
                          "typeString": "literal_string \"wORG\""
                        },
                        "value": "wORG"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$9925",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ae5633a20cefad0fe719416c8d177abd91a67e277d82002c059c6d54b7c39980",
                          "typeString": "literal_string \"Wrapped org token\""
                        },
                        {
                          "typeIdentifier": "t_stringliteral_46fabe4ace633b4e922dbe6be1939267be21ac1d268cd76aaee20968f27bd7bc",
                          "typeString": "literal_string \"wORG\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 663,
                        "name": "tokenWrapper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 640,
                        "src": "2056:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TokenWrapper_$458",
                          "typeString": "contract TokenWrapper"
                        }
                      },
                      "id": 665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 112,
                      "src": "2056:23:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$9925_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (contract ERC20,string memory,string memory) external"
                      }
                    },
                    "id": 669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2056:69:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 670,
                  "nodeType": "ExpressionStatement",
                  "src": "2056:69:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 675,
                        "name": "tokenWrapper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 640,
                        "src": "2180:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TokenWrapper_$458",
                          "typeString": "contract TokenWrapper"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 678,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3530",
                          "id": 676,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2194:2:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_50_by_1",
                            "typeString": "int_const 50"
                          },
                          "value": "50"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "*",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 677,
                          "name": "PCT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 565,
                          "src": "2199:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "2194:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3230",
                          "id": 679,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2204:2:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_20_by_1",
                            "typeString": "int_const 20"
                          },
                          "value": "20"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "*",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 680,
                          "name": "PCT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 565,
                          "src": "2209:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "2204:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 682,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2214:6:1",
                        "subdenomination": "days",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_86400_by_1",
                          "typeString": "int_const 86400"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_TokenWrapper_$458",
                          "typeString": "contract TokenWrapper"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_rational_86400_by_1",
                          "typeString": "int_const 86400"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 672,
                            "name": "voting",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 652,
                            "src": "2161:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Voting_$3488",
                              "typeString": "contract Voting"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Voting_$3488",
                              "typeString": "contract Voting"
                            }
                          ],
                          "id": 671,
                          "name": "IVotingGenericInitializer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 793,
                          "src": "2135:25:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IVotingGenericInitializer_$793_$",
                            "typeString": "type(contract IVotingGenericInitializer)"
                          }
                        },
                        "id": 673,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2135:33:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IVotingGenericInitializer_$793",
                          "typeString": "contract IVotingGenericInitializer"
                        }
                      },
                      "id": 674,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 792,
                      "src": "2135:44:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20WithCheckpointing_$10378_$_t_uint64_$_t_uint64_$_t_uint64_$returns$__$",
                        "typeString": "function (contract IERC20WithCheckpointing,uint64,uint64,uint64) external"
                      }
                    },
                    "id": 683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2135:86:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 684,
                  "nodeType": "ExpressionStatement",
                  "src": "2135:86:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 690,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "-",
                            "prefix": true,
                            "src": "2448:2:1",
                            "subExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 689,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2449:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_-1_by_1",
                              "typeString": "int_const -1"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_-1_by_1",
                              "typeString": "int_const -1"
                            }
                          ],
                          "id": 688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2440:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2440:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 692,
                        "name": "tokenWrapper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 640,
                        "src": "2453:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TokenWrapper_$458",
                          "typeString": "contract TokenWrapper"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 695,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "-",
                            "prefix": true,
                            "src": "2475:2:1",
                            "subExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 694,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2476:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_-1_by_1",
                              "typeString": "int_const -1"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_-1_by_1",
                              "typeString": "int_const -1"
                            }
                          ],
                          "id": 693,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2467:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": "bytes32"
                        },
                        "id": 696,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2467:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 697,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 615,
                        "src": "2480:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_TokenWrapper_$458",
                          "typeString": "contract TokenWrapper"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 685,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2419:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 687,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3709,
                      "src": "2419:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 698,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2419:66:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 699,
                  "nodeType": "ExpressionStatement",
                  "src": "2419:66:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 703,
                        "name": "ANY_ENTITY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 571,
                        "src": "2517:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 704,
                        "name": "voting",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 652,
                        "src": "2529:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Voting_$3488",
                          "typeString": "contract Voting"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 705,
                            "name": "voting",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 652,
                            "src": "2537:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Voting_$3488",
                              "typeString": "contract Voting"
                            }
                          },
                          "id": 706,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_VOTES_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2525,
                          "src": "2537:24:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 707,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2537:26:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 708,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 615,
                        "src": "2565:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_Voting_$3488",
                          "typeString": "contract Voting"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 700,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2496:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 702,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3709,
                      "src": "2496:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2496:74:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 710,
                  "nodeType": "ExpressionStatement",
                  "src": "2496:74:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 714,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 615,
                        "src": "2633:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 715,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 589,
                        "src": "2639:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 716,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "2644:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$8723",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "APP_MANAGER_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8265,
                          "src": "2644:20:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2644:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 711,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2613:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 713,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "grantPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3730,
                      "src": "2613:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2613:54:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 720,
                  "nodeType": "ExpressionStatement",
                  "src": "2613:54:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 724,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10553,
                        "src": "2698:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 725,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 589,
                        "src": "2704:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 726,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "2709:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$8723",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "APP_MANAGER_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8265,
                          "src": "2709:20:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 728,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2709:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        },
                        {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 721,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2677:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 723,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "revokePermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3787,
                      "src": "2677:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2677:55:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 730,
                  "nodeType": "ExpressionStatement",
                  "src": "2677:55:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 734,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 615,
                        "src": "2767:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 735,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 589,
                        "src": "2773:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 736,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "2778:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$8723",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 737,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "APP_MANAGER_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8265,
                          "src": "2778:20:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 738,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2778:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 731,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2742:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 733,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setPermissionManager",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3807,
                      "src": "2742:24:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2742:59:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 740,
                  "nodeType": "ExpressionStatement",
                  "src": "2742:59:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 744,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 615,
                        "src": "2832:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 745,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2838:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 746,
                            "name": "acl",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 596,
                            "src": "2843:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ACL_$4783",
                              "typeString": "contract ACL"
                            }
                          },
                          "id": 747,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_PERMISSIONS_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3507,
                          "src": "2843:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 748,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2843:29:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 741,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2812:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 743,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "grantPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3730,
                      "src": "2812:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 749,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2812:61:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 750,
                  "nodeType": "ExpressionStatement",
                  "src": "2812:61:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 754,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10553,
                        "src": "2904:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 755,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2910:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 756,
                            "name": "acl",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 596,
                            "src": "2915:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ACL_$4783",
                              "typeString": "contract ACL"
                            }
                          },
                          "id": 757,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_PERMISSIONS_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3507,
                          "src": "2915:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 758,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2915:29:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 751,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2883:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 753,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "revokePermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3787,
                      "src": "2883:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2883:62:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 760,
                  "nodeType": "ExpressionStatement",
                  "src": "2883:62:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 764,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 615,
                        "src": "2980:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 765,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2986:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 766,
                            "name": "acl",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 596,
                            "src": "2991:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ACL_$4783",
                              "typeString": "contract ACL"
                            }
                          },
                          "id": 767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_PERMISSIONS_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3507,
                          "src": "2991:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 768,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2991:29:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 761,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2955:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 763,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setPermissionManager",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3807,
                      "src": "2955:24:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 769,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2955:66:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 770,
                  "nodeType": "ExpressionStatement",
                  "src": "2955:66:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 772,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 589,
                        "src": "3052:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        }
                      ],
                      "id": 771,
                      "name": "DeployInstance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 478,
                      "src": "3037:14:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 773,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3037:19:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 774,
                  "nodeType": "EmitStatement",
                  "src": "3032:24:1"
                }
              ]
            },
            "documentation": null,
            "id": 776,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "newInstance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 586,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 585,
                  "name": "_depositedToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 776,
                  "src": "1410:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$9925",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 584,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9925,
                    "src": "1410:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$9925",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1409:23:1"
            },
            "payable": false,
            "returnParameters": {
              "id": 587,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1440:0:1"
            },
            "scope": 777,
            "src": "1389:1674:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 778,
        "src": "1184:1881:1"
      }
    ],
    "src": "0:3066:1"
  },
  "legacyAST": {
    "absolutePath": "/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/examples/ExampleTemplate.sol",
    "exportedSymbols": {
      "ExampleTemplate": [
        777
      ],
      "TemplateBase": [
        558
      ]
    },
    "id": 778,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 460,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:1"
      },
      {
        "absolutePath": "@aragon/os/contracts/factory/DAOFactory.sol",
        "file": "@aragon/os/contracts/factory/DAOFactory.sol",
        "id": 461,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 8071,
        "src": "25:53:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/apm/Repo.sol",
        "file": "@aragon/os/contracts/apm/Repo.sol",
        "id": 462,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 5741,
        "src": "79:43:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/ens/ENS.sol",
        "file": "@aragon/os/contracts/lib/ens/ENS.sol",
        "id": 463,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 9089,
        "src": "123:46:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/ens/PublicResolver.sol",
        "file": "@aragon/os/contracts/lib/ens/PublicResolver.sol",
        "id": 464,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 9551,
        "src": "170:57:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/apm/APMNamehash.sol",
        "file": "@aragon/os/contracts/apm/APMNamehash.sol",
        "id": 465,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 5348,
        "src": "228:50:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/apps-voting/contracts/Voting.sol",
        "file": "@aragon/apps-voting/contracts/Voting.sol",
        "id": 466,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 3489,
        "src": "280:50:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/TokenWrapper.sol",
        "file": "../TokenWrapper.sol",
        "id": 467,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 459,
        "src": "332:29:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/examples/IVotingGenericInitializer.sol",
        "file": "./IVotingGenericInitializer.sol",
        "id": 468,
        "nodeType": "ImportDirective",
        "scope": 778,
        "sourceUnit": 794,
        "src": "362:41:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 469,
              "name": "APMNamehash",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5347,
              "src": "431:11:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_APMNamehash_$5347",
                "typeString": "contract APMNamehash"
              }
            },
            "id": 470,
            "nodeType": "InheritanceSpecifier",
            "src": "431:11:1"
          }
        ],
        "contractDependencies": [
          5347
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 558,
        "linearizedBaseContracts": [
          558,
          5347
        ],
        "name": "TemplateBase",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 472,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 558,
            "src": "449:14:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$9088",
              "typeString": "contract ENS"
            },
            "typeName": {
              "contractScope": null,
              "id": 471,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9088,
              "src": "449:3:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$9088",
                "typeString": "contract ENS"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 474,
            "name": "fac",
            "nodeType": "VariableDeclaration",
            "scope": 558,
            "src": "469:21:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DAOFactory_$8070",
              "typeString": "contract DAOFactory"
            },
            "typeName": {
              "contractScope": null,
              "id": 473,
              "name": "DAOFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8070,
              "src": "469:10:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DAOFactory_$8070",
                "typeString": "contract DAOFactory"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 478,
            "name": "DeployInstance",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 477,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 476,
                  "indexed": false,
                  "name": "dao",
                  "nodeType": "VariableDeclaration",
                  "scope": 478,
                  "src": "518:11:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 475,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "518:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "517:13:1"
            },
            "src": "497:34:1"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 484,
            "name": "InstalledApp",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 480,
                  "indexed": false,
                  "name": "appProxy",
                  "nodeType": "VariableDeclaration",
                  "scope": 484,
                  "src": "555:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 479,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "555:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 482,
                  "indexed": false,
                  "name": "appId",
                  "nodeType": "VariableDeclaration",
                  "scope": 484,
                  "src": "573:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 481,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "573:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "554:33:1"
            },
            "src": "536:52:1"
          },
          {
            "body": {
              "id": 525,
              "nodeType": "Block",
              "src": "640:312:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 491,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 472,
                      "src": "650:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$9088",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 492,
                      "name": "_ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 488,
                      "src": "656:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$9088",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "650:10:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$9088",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 494,
                  "nodeType": "ExpressionStatement",
                  "src": "650:10:1"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 496,
                          "name": "_fac",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 486,
                          "src": "749:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DAOFactory_$8070",
                            "typeString": "contract DAOFactory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DAOFactory_$8070",
                            "typeString": "contract DAOFactory"
                          }
                        ],
                        "id": 495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "741:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "741:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "766:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 498,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "758:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 500,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "758:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "741:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 523,
                    "nodeType": "Block",
                    "src": "911:35:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 519,
                            "name": "fac",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 474,
                            "src": "925:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOFactory_$8070",
                              "typeString": "contract DAOFactory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 520,
                            "name": "_fac",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 486,
                            "src": "931:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOFactory_$8070",
                              "typeString": "contract DAOFactory"
                            }
                          },
                          "src": "925:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DAOFactory_$8070",
                            "typeString": "contract DAOFactory"
                          }
                        },
                        "id": 522,
                        "nodeType": "ExpressionStatement",
                        "src": "925:10:1"
                      }
                    ]
                  },
                  "id": 524,
                  "nodeType": "IfStatement",
                  "src": "737:209:1",
                  "trueBody": {
                    "id": 518,
                    "nodeType": "Block",
                    "src": "770:135:1",
                    "statements": [
                      {
                        "assignments": [
                          503
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 503,
                            "name": "bareKit",
                            "nodeType": "VariableDeclaration",
                            "scope": 526,
                            "src": "784:15:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 502,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "784:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 507,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "626172652d6b6974",
                              "id": 505,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "814:10:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_eae34e1d5adf3d84ddaf56c05425677b54d69a021ff0c01c8b5f2289b91a4e9f",
                                "typeString": "literal_string \"bare-kit\""
                              },
                              "value": "bare-kit"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_eae34e1d5adf3d84ddaf56c05425677b54d69a021ff0c01c8b5f2289b91a4e9f",
                                "typeString": "literal_string \"bare-kit\""
                              }
                            ],
                            "id": 504,
                            "name": "apmNamehash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5346,
                            "src": "802:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (string memory) pure returns (bytes32)"
                            }
                          },
                          "id": 506,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "802:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "784:41:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 508,
                            "name": "fac",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 474,
                            "src": "839:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOFactory_$8070",
                              "typeString": "contract DAOFactory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 511,
                                        "name": "bareKit",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 503,
                                        "src": "879:7:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 510,
                                      "name": "latestVersionAppBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 557,
                                      "src": "858:20:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                                        "typeString": "function (bytes32) view returns (address)"
                                      }
                                    },
                                    "id": 512,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "858:29:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 509,
                                  "name": "TemplateBase",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 558,
                                  "src": "845:12:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_TemplateBase_$558_$",
                                    "typeString": "type(contract TemplateBase)"
                                  }
                                },
                                "id": 513,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "845:43:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_TemplateBase_$558",
                                  "typeString": "contract TemplateBase"
                                }
                              },
                              "id": 514,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "fac",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 474,
                              "src": "845:47:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOFactory_$8070_$",
                                "typeString": "function () view external returns (contract DAOFactory)"
                              }
                            },
                            "id": 515,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "845:49:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOFactory_$8070",
                              "typeString": "contract DAOFactory"
                            }
                          },
                          "src": "839:55:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DAOFactory_$8070",
                            "typeString": "contract DAOFactory"
                          }
                        },
                        "id": 517,
                        "nodeType": "ExpressionStatement",
                        "src": "839:55:1"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 526,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 489,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 486,
                  "name": "_fac",
                  "nodeType": "VariableDeclaration",
                  "scope": 526,
                  "src": "606:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DAOFactory_$8070",
                    "typeString": "contract DAOFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 485,
                    "name": "DAOFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8070,
                    "src": "606:10:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DAOFactory_$8070",
                      "typeString": "contract DAOFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 488,
                  "name": "_ens",
                  "nodeType": "VariableDeclaration",
                  "scope": 526,
                  "src": "623:8:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$9088",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 487,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9088,
                    "src": "623:3:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$9088",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "605:27:1"
            },
            "payable": false,
            "returnParameters": {
              "id": 490,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "640:0:1"
            },
            "scope": 558,
            "src": "594:358:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 556,
              "nodeType": "Block",
              "src": "1038:141:1",
              "statements": [
                {
                  "assignments": [
                    534
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 534,
                      "name": "repo",
                      "nodeType": "VariableDeclaration",
                      "scope": 557,
                      "src": "1048:9:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Repo_$5740",
                        "typeString": "contract Repo"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 533,
                        "name": "Repo",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5740,
                        "src": "1048:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Repo_$5740",
                          "typeString": "contract Repo"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 546,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 543,
                            "name": "appId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 528,
                            "src": "1106:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 539,
                                    "name": "appId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 528,
                                    "src": "1093:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 537,
                                    "name": "ens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 472,
                                    "src": "1080:3:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ENS_$9088",
                                      "typeString": "contract ENS"
                                    }
                                  },
                                  "id": 538,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "resolver",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8973,
                                  "src": "1080:12:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                                    "typeString": "function (bytes32) view external returns (address)"
                                  }
                                },
                                "id": 540,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1080:19:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 536,
                              "name": "PublicResolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9550,
                              "src": "1065:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PublicResolver_$9550_$",
                                "typeString": "type(contract PublicResolver)"
                              }
                            },
                            "id": 541,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1065:35:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PublicResolver_$9550",
                              "typeString": "contract PublicResolver"
                            }
                          },
                          "id": 542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "addr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9256,
                          "src": "1065:40:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 544,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1065:47:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 535,
                      "name": "Repo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5740,
                      "src": "1060:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Repo_$5740_$",
                        "typeString": "type(contract Repo)"
                      }
                    },
                    "id": 545,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1060:53:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Repo_$5740",
                      "typeString": "contract Repo"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1048:65:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        null,
                        {
                          "argumentTypes": null,
                          "id": 547,
                          "name": "base",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 531,
                          "src": "1125:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        null
                      ],
                      "id": 548,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "1123:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$_t_address_$__$",
                        "typeString": "tuple(,address,)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 549,
                          "name": "repo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 534,
                          "src": "1134:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Repo_$5740",
                            "typeString": "contract Repo"
                          }
                        },
                        "id": 550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getLatest",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5544,
                        "src": "1134:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_array$_t_uint16_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$",
                          "typeString": "function () view external returns (uint16[3] memory,address,bytes memory)"
                        }
                      },
                      "id": 551,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1134:16:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_array$_t_uint16_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(uint16[3] memory,address,bytes memory)"
                      }
                    },
                    "src": "1123:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 553,
                  "nodeType": "ExpressionStatement",
                  "src": "1123:27:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 554,
                    "name": "base",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 531,
                    "src": "1168:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 532,
                  "id": 555,
                  "nodeType": "Return",
                  "src": "1161:11:1"
                }
              ]
            },
            "documentation": null,
            "id": 557,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "latestVersionAppBase",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 529,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 528,
                  "name": "appId",
                  "nodeType": "VariableDeclaration",
                  "scope": 557,
                  "src": "988:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 527,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "988:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "987:15:1"
            },
            "payable": false,
            "returnParameters": {
              "id": 532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 531,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 557,
                  "src": "1024:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 530,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1024:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1023:14:1"
            },
            "scope": 558,
            "src": "958:221:1",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 778,
        "src": "406:775:1"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 559,
              "name": "TemplateBase",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 558,
              "src": "1212:12:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TemplateBase_$558",
                "typeString": "contract TemplateBase"
              }
            },
            "id": 560,
            "nodeType": "InheritanceSpecifier",
            "src": "1212:12:1"
          }
        ],
        "contractDependencies": [
          558,
          5347
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 777,
        "linearizedBaseContracts": [
          777,
          558,
          5347
        ],
        "name": "ExampleTemplate",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 565,
            "name": "PCT",
            "nodeType": "VariableDeclaration",
            "scope": 777,
            "src": "1231:30:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 561,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1231:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_rational_10000000000000000_by_1",
                "typeString": "int_const 10000000000000000"
              },
              "id": 564,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "hexValue": "3130",
                "id": 562,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1253:2:1",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_10_by_1",
                  "typeString": "int_const 10"
                },
                "value": "10"
              },
              "nodeType": "BinaryOperation",
              "operator": "**",
              "rightExpression": {
                "argumentTypes": null,
                "hexValue": "3136",
                "id": 563,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1259:2:1",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_16_by_1",
                  "typeString": "int_const 16"
                },
                "value": "16"
              },
              "src": "1253:8:1",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_10000000000000000_by_1",
                "typeString": "int_const 10000000000000000"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 571,
            "name": "ANY_ENTITY",
            "nodeType": "VariableDeclaration",
            "scope": 777,
            "src": "1267:41:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 566,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1267:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 569,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1305:2:1",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1306:1:1",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 567,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1297:7:1",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": "address"
              },
              "id": 570,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1297:11:1",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "body": {
              "id": 582,
              "nodeType": "Block",
              "src": "1376:7:1",
              "statements": []
            },
            "documentation": null,
            "id": 583,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 577,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1360:1:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 576,
                      "name": "DAOFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8070,
                      "src": "1349:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_DAOFactory_$8070_$",
                        "typeString": "type(contract DAOFactory)"
                      }
                    },
                    "id": 578,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1349:13:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DAOFactory_$8070",
                      "typeString": "contract DAOFactory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 579,
                    "name": "ens",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 573,
                    "src": "1364:3:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$9088",
                      "typeString": "contract ENS"
                    }
                  }
                ],
                "id": 580,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 575,
                  "name": "TemplateBase",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 558,
                  "src": "1336:12:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_TemplateBase_$558_$",
                    "typeString": "type(contract TemplateBase)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1336:32:1"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 574,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 573,
                  "name": "ens",
                  "nodeType": "VariableDeclaration",
                  "scope": 583,
                  "src": "1327:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$9088",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 572,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9088,
                    "src": "1327:3:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$9088",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1326:9:1"
            },
            "payable": false,
            "returnParameters": {
              "id": 581,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1376:0:1"
            },
            "scope": 777,
            "src": "1315:68:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 775,
              "nodeType": "Block",
              "src": "1440:1623:1",
              "statements": [
                {
                  "assignments": [
                    589
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 589,
                      "name": "dao",
                      "nodeType": "VariableDeclaration",
                      "scope": 776,
                      "src": "1450:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Kernel_$8723",
                        "typeString": "contract Kernel"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 588,
                        "name": "Kernel",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 8723,
                        "src": "1450:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 594,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 592,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10553,
                        "src": "1474:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 590,
                        "name": "fac",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 474,
                        "src": "1463:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DAOFactory_$8070",
                          "typeString": "contract DAOFactory"
                        }
                      },
                      "id": 591,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "newDAO",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8069,
                      "src": "1463:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_contract$_Kernel_$8723_$",
                        "typeString": "function (address) external returns (contract Kernel)"
                      }
                    },
                    "id": 593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1463:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Kernel_$8723",
                      "typeString": "contract Kernel"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1450:29:1"
                },
                {
                  "assignments": [
                    596
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 596,
                      "name": "acl",
                      "nodeType": "VariableDeclaration",
                      "scope": 776,
                      "src": "1489:7:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ACL_$4783",
                        "typeString": "contract ACL"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 595,
                        "name": "ACL",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4783,
                        "src": "1489:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 602,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 598,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "1503:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$8723",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "acl",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8593,
                          "src": "1503:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IACL_$5304_$",
                            "typeString": "function () view external returns (contract IACL)"
                          }
                        },
                        "id": 600,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1503:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IACL_$5304",
                          "typeString": "contract IACL"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IACL_$5304",
                          "typeString": "contract IACL"
                        }
                      ],
                      "id": 597,
                      "name": "ACL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4783,
                      "src": "1499:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ACL_$4783_$",
                        "typeString": "type(contract ACL)"
                      }
                    },
                    "id": 601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1499:14:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ACL_$4783",
                      "typeString": "contract ACL"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1489:24:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 606,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10553,
                        "src": "1544:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 607,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 589,
                        "src": "1550:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 608,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "1555:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$8723",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "APP_MANAGER_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8265,
                          "src": "1555:20:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 610,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1555:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 611,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10553,
                        "src": "1579:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        },
                        {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 603,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "1523:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 605,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3709,
                      "src": "1523:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1523:61:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 613,
                  "nodeType": "ExpressionStatement",
                  "src": "1523:61:1"
                },
                {
                  "assignments": [
                    615
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 615,
                      "name": "root",
                      "nodeType": "VariableDeclaration",
                      "scope": 776,
                      "src": "1595:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 614,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1595:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 618,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 616,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10404,
                      "src": "1610:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1610:10:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1595:25:1"
                },
                {
                  "assignments": [
                    620
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 620,
                      "name": "tokenWrapperAppId",
                      "nodeType": "VariableDeclaration",
                      "scope": 776,
                      "src": "1630:25:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 619,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1630:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 632,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "6f70656e",
                                "id": 625,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1697:6:1",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_99f30275ab70dd1890c0789c4570632b6f0b0284d11c2d9e587d0368f7027018",
                                  "typeString": "literal_string \"open\""
                                },
                                "value": "open"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_99f30275ab70dd1890c0789c4570632b6f0b0284d11c2d9e587d0368f7027018",
                                  "typeString": "literal_string \"open\""
                                }
                              ],
                              "id": 624,
                              "name": "apmNamehash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5346,
                              "src": "1685:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (string memory) pure returns (bytes32)"
                              }
                            },
                            "id": 626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1685:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "746f6b656e2d77726170706572",
                                "id": 628,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1716:15:1",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_13d51246a8c5d02e48f49067b9cafdc362643289cc6977f9d9b08adc81a50624",
                                  "typeString": "literal_string \"token-wrapper\""
                                },
                                "value": "token-wrapper"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_13d51246a8c5d02e48f49067b9cafdc362643289cc6977f9d9b08adc81a50624",
                                  "typeString": "literal_string \"token-wrapper\""
                                }
                              ],
                              "id": 627,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10398,
                              "src": "1706:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 629,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1706:26:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 622,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10391,
                            "src": "1668:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1668:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 630,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1668:65:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 621,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10398,
                      "src": "1658:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1658:76:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1630:104:1"
                },
                {
                  "assignments": [
                    634
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 634,
                      "name": "votingAppId",
                      "nodeType": "VariableDeclaration",
                      "scope": 776,
                      "src": "1744:19:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 633,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1744:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 638,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "766f74696e67",
                        "id": 636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1778:8:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0e49311626a26ba5be58a3b13d239908e80ce0dffdd5c50bf1d9c82ff35d1ab3",
                          "typeString": "literal_string \"voting\""
                        },
                        "value": "voting"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_0e49311626a26ba5be58a3b13d239908e80ce0dffdd5c50bf1d9c82ff35d1ab3",
                          "typeString": "literal_string \"voting\""
                        }
                      ],
                      "id": 635,
                      "name": "apmNamehash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5346,
                      "src": "1766:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (string memory) pure returns (bytes32)"
                      }
                    },
                    "id": 637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1766:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1744:43:1"
                },
                {
                  "assignments": [
                    640
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 640,
                      "name": "tokenWrapper",
                      "nodeType": "VariableDeclaration",
                      "scope": 776,
                      "src": "1798:25:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TokenWrapper_$458",
                        "typeString": "contract TokenWrapper"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 639,
                        "name": "TokenWrapper",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 458,
                        "src": "1798:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TokenWrapper_$458",
                          "typeString": "contract TokenWrapper"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 650,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 644,
                            "name": "tokenWrapperAppId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 620,
                            "src": "1858:17:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 646,
                                "name": "tokenWrapperAppId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 620,
                                "src": "1898:17:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 645,
                              "name": "latestVersionAppBase",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 557,
                              "src": "1877:20:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (bytes32) view returns (address)"
                              }
                            },
                            "id": 647,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1877:39:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 642,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "1839:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$8723",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "newAppInstance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8357,
                          "src": "1839:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$_t_contract$_ERCProxy_$9856_$",
                            "typeString": "function (bytes32,address) external returns (contract ERCProxy)"
                          }
                        },
                        "id": 648,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1839:78:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERCProxy_$9856",
                          "typeString": "contract ERCProxy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERCProxy_$9856",
                          "typeString": "contract ERCProxy"
                        }
                      ],
                      "id": 641,
                      "name": "TokenWrapper",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 458,
                      "src": "1826:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_TokenWrapper_$458_$",
                        "typeString": "type(contract TokenWrapper)"
                      }
                    },
                    "id": 649,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1826:92:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TokenWrapper_$458",
                      "typeString": "contract TokenWrapper"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1798:120:1"
                },
                {
                  "assignments": [
                    652
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 652,
                      "name": "voting",
                      "nodeType": "VariableDeclaration",
                      "scope": 776,
                      "src": "1928:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Voting_$3488",
                        "typeString": "contract Voting"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 651,
                        "name": "Voting",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3488,
                        "src": "1928:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Voting_$3488",
                          "typeString": "contract Voting"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 662,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 656,
                            "name": "votingAppId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 634,
                            "src": "1970:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 658,
                                "name": "votingAppId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 634,
                                "src": "2004:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 657,
                              "name": "latestVersionAppBase",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 557,
                              "src": "1983:20:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (bytes32) view returns (address)"
                              }
                            },
                            "id": 659,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1983:33:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 654,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "1951:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$8723",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "newAppInstance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8357,
                          "src": "1951:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$_t_contract$_ERCProxy_$9856_$",
                            "typeString": "function (bytes32,address) external returns (contract ERCProxy)"
                          }
                        },
                        "id": 660,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1951:66:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERCProxy_$9856",
                          "typeString": "contract ERCProxy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERCProxy_$9856",
                          "typeString": "contract ERCProxy"
                        }
                      ],
                      "id": 653,
                      "name": "Voting",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3488,
                      "src": "1944:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Voting_$3488_$",
                        "typeString": "type(contract Voting)"
                      }
                    },
                    "id": 661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1944:74:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Voting_$3488",
                      "typeString": "contract Voting"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1928:90:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 666,
                        "name": "_depositedToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 585,
                        "src": "2080:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$9925",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "57726170706564206f726720746f6b656e",
                        "id": 667,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2097:19:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ae5633a20cefad0fe719416c8d177abd91a67e277d82002c059c6d54b7c39980",
                          "typeString": "literal_string \"Wrapped org token\""
                        },
                        "value": "Wrapped org token"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "774f5247",
                        "id": 668,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2118:6:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_46fabe4ace633b4e922dbe6be1939267be21ac1d268cd76aaee20968f27bd7bc",
                          "typeString": "literal_string \"wORG\""
                        },
                        "value": "wORG"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$9925",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ae5633a20cefad0fe719416c8d177abd91a67e277d82002c059c6d54b7c39980",
                          "typeString": "literal_string \"Wrapped org token\""
                        },
                        {
                          "typeIdentifier": "t_stringliteral_46fabe4ace633b4e922dbe6be1939267be21ac1d268cd76aaee20968f27bd7bc",
                          "typeString": "literal_string \"wORG\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 663,
                        "name": "tokenWrapper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 640,
                        "src": "2056:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TokenWrapper_$458",
                          "typeString": "contract TokenWrapper"
                        }
                      },
                      "id": 665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 112,
                      "src": "2056:23:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$9925_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (contract ERC20,string memory,string memory) external"
                      }
                    },
                    "id": 669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2056:69:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 670,
                  "nodeType": "ExpressionStatement",
                  "src": "2056:69:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 675,
                        "name": "tokenWrapper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 640,
                        "src": "2180:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TokenWrapper_$458",
                          "typeString": "contract TokenWrapper"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 678,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3530",
                          "id": 676,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2194:2:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_50_by_1",
                            "typeString": "int_const 50"
                          },
                          "value": "50"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "*",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 677,
                          "name": "PCT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 565,
                          "src": "2199:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "2194:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3230",
                          "id": 679,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2204:2:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_20_by_1",
                            "typeString": "int_const 20"
                          },
                          "value": "20"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "*",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 680,
                          "name": "PCT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 565,
                          "src": "2209:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "2204:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 682,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2214:6:1",
                        "subdenomination": "days",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_86400_by_1",
                          "typeString": "int_const 86400"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_TokenWrapper_$458",
                          "typeString": "contract TokenWrapper"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_rational_86400_by_1",
                          "typeString": "int_const 86400"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 672,
                            "name": "voting",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 652,
                            "src": "2161:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Voting_$3488",
                              "typeString": "contract Voting"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Voting_$3488",
                              "typeString": "contract Voting"
                            }
                          ],
                          "id": 671,
                          "name": "IVotingGenericInitializer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 793,
                          "src": "2135:25:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IVotingGenericInitializer_$793_$",
                            "typeString": "type(contract IVotingGenericInitializer)"
                          }
                        },
                        "id": 673,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2135:33:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IVotingGenericInitializer_$793",
                          "typeString": "contract IVotingGenericInitializer"
                        }
                      },
                      "id": 674,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 792,
                      "src": "2135:44:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20WithCheckpointing_$10378_$_t_uint64_$_t_uint64_$_t_uint64_$returns$__$",
                        "typeString": "function (contract IERC20WithCheckpointing,uint64,uint64,uint64) external"
                      }
                    },
                    "id": 683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2135:86:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 684,
                  "nodeType": "ExpressionStatement",
                  "src": "2135:86:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 690,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "-",
                            "prefix": true,
                            "src": "2448:2:1",
                            "subExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 689,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2449:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_-1_by_1",
                              "typeString": "int_const -1"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_-1_by_1",
                              "typeString": "int_const -1"
                            }
                          ],
                          "id": 688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2440:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2440:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 692,
                        "name": "tokenWrapper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 640,
                        "src": "2453:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TokenWrapper_$458",
                          "typeString": "contract TokenWrapper"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 695,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "-",
                            "prefix": true,
                            "src": "2475:2:1",
                            "subExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 694,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2476:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_-1_by_1",
                              "typeString": "int_const -1"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_-1_by_1",
                              "typeString": "int_const -1"
                            }
                          ],
                          "id": 693,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2467:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": "bytes32"
                        },
                        "id": 696,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2467:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 697,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 615,
                        "src": "2480:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_TokenWrapper_$458",
                          "typeString": "contract TokenWrapper"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 685,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2419:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 687,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3709,
                      "src": "2419:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 698,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2419:66:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 699,
                  "nodeType": "ExpressionStatement",
                  "src": "2419:66:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 703,
                        "name": "ANY_ENTITY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 571,
                        "src": "2517:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 704,
                        "name": "voting",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 652,
                        "src": "2529:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Voting_$3488",
                          "typeString": "contract Voting"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 705,
                            "name": "voting",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 652,
                            "src": "2537:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Voting_$3488",
                              "typeString": "contract Voting"
                            }
                          },
                          "id": 706,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_VOTES_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2525,
                          "src": "2537:24:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 707,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2537:26:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 708,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 615,
                        "src": "2565:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_Voting_$3488",
                          "typeString": "contract Voting"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 700,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2496:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 702,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3709,
                      "src": "2496:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2496:74:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 710,
                  "nodeType": "ExpressionStatement",
                  "src": "2496:74:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 714,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 615,
                        "src": "2633:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 715,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 589,
                        "src": "2639:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 716,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "2644:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$8723",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "APP_MANAGER_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8265,
                          "src": "2644:20:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2644:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 711,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2613:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 713,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "grantPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3730,
                      "src": "2613:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2613:54:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 720,
                  "nodeType": "ExpressionStatement",
                  "src": "2613:54:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 724,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10553,
                        "src": "2698:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 725,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 589,
                        "src": "2704:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 726,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "2709:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$8723",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "APP_MANAGER_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8265,
                          "src": "2709:20:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 728,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2709:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        },
                        {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 721,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2677:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 723,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "revokePermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3787,
                      "src": "2677:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2677:55:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 730,
                  "nodeType": "ExpressionStatement",
                  "src": "2677:55:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 734,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 615,
                        "src": "2767:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 735,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 589,
                        "src": "2773:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 736,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "2778:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$8723",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 737,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "APP_MANAGER_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8265,
                          "src": "2778:20:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 738,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2778:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 731,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2742:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 733,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setPermissionManager",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3807,
                      "src": "2742:24:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2742:59:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 740,
                  "nodeType": "ExpressionStatement",
                  "src": "2742:59:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 744,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 615,
                        "src": "2832:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 745,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2838:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 746,
                            "name": "acl",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 596,
                            "src": "2843:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ACL_$4783",
                              "typeString": "contract ACL"
                            }
                          },
                          "id": 747,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_PERMISSIONS_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3507,
                          "src": "2843:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 748,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2843:29:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 741,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2812:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 743,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "grantPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3730,
                      "src": "2812:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 749,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2812:61:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 750,
                  "nodeType": "ExpressionStatement",
                  "src": "2812:61:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 754,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10553,
                        "src": "2904:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 755,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2910:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 756,
                            "name": "acl",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 596,
                            "src": "2915:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ACL_$4783",
                              "typeString": "contract ACL"
                            }
                          },
                          "id": 757,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_PERMISSIONS_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3507,
                          "src": "2915:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 758,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2915:29:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ExampleTemplate_$777",
                          "typeString": "contract ExampleTemplate"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 751,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2883:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 753,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "revokePermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3787,
                      "src": "2883:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2883:62:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 760,
                  "nodeType": "ExpressionStatement",
                  "src": "2883:62:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 764,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 615,
                        "src": "2980:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 765,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2986:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 766,
                            "name": "acl",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 596,
                            "src": "2991:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ACL_$4783",
                              "typeString": "contract ACL"
                            }
                          },
                          "id": 767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_PERMISSIONS_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3507,
                          "src": "2991:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 768,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2991:29:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 761,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 596,
                        "src": "2955:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$4783",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 763,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setPermissionManager",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3807,
                      "src": "2955:24:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 769,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2955:66:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 770,
                  "nodeType": "ExpressionStatement",
                  "src": "2955:66:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 772,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 589,
                        "src": "3052:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Kernel_$8723",
                          "typeString": "contract Kernel"
                        }
                      ],
                      "id": 771,
                      "name": "DeployInstance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 478,
                      "src": "3037:14:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 773,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3037:19:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 774,
                  "nodeType": "EmitStatement",
                  "src": "3032:24:1"
                }
              ]
            },
            "documentation": null,
            "id": 776,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "newInstance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 586,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 585,
                  "name": "_depositedToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 776,
                  "src": "1410:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$9925",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 584,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9925,
                    "src": "1410:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$9925",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1409:23:1"
            },
            "payable": false,
            "returnParameters": {
              "id": 587,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1440:0:1"
            },
            "scope": 777,
            "src": "1389:1674:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 778,
        "src": "1184:1881:1"
      }
    ],
    "src": "0:3066:1"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-06-07T23:27:00.428Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}