{
  "contractName": "ControllerMock",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_params",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "enum GlobalConstraintInterface.CallPhase",
          "name": "_when",
          "type": "uint8"
        }
      ],
      "name": "AddGlobalConstraint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "BurnReputation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "MintReputation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "MintTokens",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        }
      ],
      "name": "RegisterScheme",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_isPre",
          "type": "bool"
        }
      ],
      "name": "RemoveGlobalConstraint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        }
      ],
      "name": "UnregisterScheme",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_oldController",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newController",
          "type": "address"
        }
      ],
      "name": "UpgradeController",
      "type": "event"
    },
    {
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_params",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "addGlobalConstraint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "avatar",
      "outputs": [
        {
          "internalType": "contract Avatar",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "burnReputation",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_externalToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "externalTokenApproval",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_externalToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "externalTokenTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_externalToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "externalTokenTransferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getGlobalConstraintParameters",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "getNativeReputation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "getSchemeParameters",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "getSchemePermissions",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "globalConstraintsCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "globalConstraintsPost",
      "outputs": [
        {
          "internalType": "address",
          "name": "gcAddress",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "params",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "globalConstraintsPre",
      "outputs": [
        {
          "internalType": "address",
          "name": "gcAddress",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "params",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "globalConstraintsRegisterPost",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isRegistered",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "globalConstraintsRegisterPre",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isRegistered",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "isGlobalConstraintRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "string",
          "name": "_metaData",
          "type": "string"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "metaData",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "mintReputation",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "mintTokens",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nativeReputation",
      "outputs": [
        {
          "internalType": "contract Reputation",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nativeToken",
      "outputs": [
        {
          "internalType": "contract DAOToken",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "newController",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_paramsHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "_permissions",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "registerScheme",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "removeGlobalConstraint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "schemes",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "paramsHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "permissions",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amountInWei",
          "type": "uint256"
        },
        {
          "internalType": "address payable",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "sendEther",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "unregisterScheme",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "unregisterSelf",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_newController",
          "type": "address"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "upgradeController",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_contract",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "genericCall",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "isSchemeRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_params\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enum GlobalConstraintInterface.CallPhase\",\"name\":\"_when\",\"type\":\"uint8\"}],\"name\":\"AddGlobalConstraint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"BurnReputation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"MintReputation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"MintTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scheme\",\"type\":\"address\"}],\"name\":\"RegisterScheme\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_isPre\",\"type\":\"bool\"}],\"name\":\"RemoveGlobalConstraint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scheme\",\"type\":\"address\"}],\"name\":\"UnregisterScheme\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newController\",\"type\":\"address\"}],\"name\":\"UpgradeController\",\"type\":\"event\"},{\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_params\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"addGlobalConstraint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"avatar\",\"outputs\":[{\"internalType\":\"contract Avatar\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"burnReputation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_externalToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"externalTokenApproval\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_externalToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"externalTokenTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_externalToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"externalTokenTransferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"genericCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getGlobalConstraintParameters\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"getNativeReputation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_scheme\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"getSchemeParameters\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_scheme\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"getSchemePermissions\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"globalConstraintsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"globalConstraintsPost\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"gcAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"params\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"globalConstraintsPre\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"gcAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"params\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"globalConstraintsRegisterPost\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"globalConstraintsRegisterPre\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"isGlobalConstraintRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_scheme\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"isSchemeRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"_metaData\",\"type\":\"string\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"metaData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"mintReputation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"mintTokens\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nativeReputation\",\"outputs\":[{\"internalType\":\"contract Reputation\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nativeToken\",\"outputs\":[{\"internalType\":\"contract DAOToken\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"newController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_scheme\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_paramsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"_permissions\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"registerScheme\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_globalConstraint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"removeGlobalConstraint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"schemes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"paramsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"permissions\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountInWei\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"sendEther\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_scheme\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"unregisterScheme\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"unregisterSelf\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newController\",\"type\":\"address\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"upgradeController\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"addGlobalConstraint(address,bytes32,address)\":{\"details\":\"add or update Global Constraint\",\"params\":{\"_globalConstraint\":\"the address of the global constraint to be added.\",\"_params\":\"the constraint parameters hash.\"},\"return\":\"bool which represents a success\"},\"burnReputation(uint256,address,address)\":{\"details\":\"Burns `_amount` of reputation from `_from`\",\"params\":{\"_amount\":\"amount of reputation to burn\",\"_from\":\"The address that will lose the reputation\"},\"return\":\"bool which represents a success\"},\"externalTokenApproval(address,address,uint256,address)\":{\"details\":\"externalTokenApproval approve the spender address to spend a specified amount of tokens     on behalf of msg.sender.\",\"params\":{\"_externalToken\":\"the address of the Token Contract\",\"_spender\":\"address\",\"_value\":\"the amount of ether (in Wei) which the approval is referring to.\"},\"return\":\"bool which represents a success\"},\"externalTokenTransfer(address,address,uint256,address)\":{\"details\":\"send some amount of arbitrary ERC20 Tokens\",\"params\":{\"_externalToken\":\"the address of the Token Contract\",\"_to\":\"address of the beneficiary\",\"_value\":\"the amount of ether (in Wei) to send\"},\"return\":\"bool which represents a success\"},\"externalTokenTransferFrom(address,address,address,uint256,address)\":{\"details\":\"transfer token \\\"from\\\" address \\\"to\\\" address     One must to approve the amount of tokens which can be spend from the     \\\"from\\\" account.This can be done using externalTokenApprove.\",\"params\":{\"_externalToken\":\"the address of the Token Contract\",\"_from\":\"address of the account to send from\",\"_to\":\"address of the beneficiary\",\"_value\":\"the amount of ether (in Wei) to send\"},\"return\":\"bool which represents a success\"},\"getNativeReputation(address)\":{\"details\":\"getNativeReputation\",\"params\":{\"_avatar\":\"the organization avatar.\"},\"return\":\"organization native reputation\"},\"globalConstraintsCount(address)\":{\"details\":\"globalConstraintsCount return the global constraint pre and post count\",\"return\":\"uint256 globalConstraintsPre count.uint256 globalConstraintsPost count.\"},\"metaData(string,address)\":{\"details\":\"metaData emits an event with a string, should contain the hash of some meta data.\",\"params\":{\"_avatar\":\"Avatar\",\"_metaData\":\"a string representing a hash of the meta data\"},\"return\":\"bool which represents a success\"},\"mintReputation(uint256,address,address)\":{\"details\":\"Mint `_amount` of reputation that are assigned to `_to` .\",\"params\":{\"_amount\":\"amount of reputation to mint\",\"_to\":\"beneficiary address\"},\"return\":\"bool which represents a success\"},\"mintTokens(uint256,address,address)\":{\"details\":\"mint tokens .\",\"params\":{\"_amount\":\"amount of token to mint\",\"_beneficiary\":\"beneficiary address\"},\"return\":\"bool which represents a success\"},\"registerScheme(address,bytes32,bytes4,address)\":{\"details\":\"register a scheme\",\"params\":{\"_paramsHash\":\"a hashed configuration of the usage of the scheme\",\"_permissions\":\"the permissions the new scheme will have\",\"_scheme\":\"the address of the scheme\"},\"return\":\"bool which represents a success\"},\"removeGlobalConstraint(address,address)\":{\"details\":\"remove Global Constraint\",\"params\":{\"_globalConstraint\":\"the address of the global constraint to be remove.\"},\"return\":\"bool which represents a success\"},\"sendEther(uint256,address,address)\":{\"details\":\"send some ether\",\"params\":{\"_amountInWei\":\"the amount of ether (in Wei) to send\",\"_to\":\"address of the beneficiary\"},\"return\":\"bool which represents a success\"},\"unregisterScheme(address,address)\":{\"details\":\"unregister a scheme\",\"params\":{\"_scheme\":\"the address of the scheme\"},\"return\":\"bool which represents a success\"},\"unregisterSelf(address)\":{\"details\":\"unregister the caller's scheme\",\"return\":\"bool which represents a success\"},\"upgradeController(address,address)\":{\"details\":\"upgrade the Controller     The function will trigger an event 'UpgradeController'.\",\"params\":{\"_newController\":\"the address of the new controller.\"},\"return\":\"bool which represents a success\"}},\"title\":\"A Controller mock. Ignores the scheme registration. Those tests can be found on e2e tests.\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/mocks/ControllerMock.sol\":\"ControllerMock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/mocks/ControllerMock.sol\":{\"keccak256\":\"0x297b303b56dbb4f338474bd323a3321e307b6a644ea0b50e0e68a7bc05523486\",\"urls\":[\"bzz-raw://8ee11c839843d42f1c085140e1da2f21da74f43d20570e9f6aa4976719977844\",\"dweb:/ipfs/QmRbtFJfoNSdByTWTvtb7ETBeCYXace68eJ8fc5bkgUsxm\"]},\"@daostack/arc/contracts/controller/Avatar.sol\":{\"keccak256\":\"0x4e4fb9d3bc21f42fbfc6a01e9f8aa483a59e9f447b0d604f55b587a81ec09ef4\",\"urls\":[\"bzz-raw://9d3c1c7575cf6075ea1d89921f09b9b8e322b208dacaf0446cd4f64506c999f0\",\"dweb:/ipfs/QmVGDDHAR2ByuQpbgV7BBKXGEAcbaWvejpEZYzHgaagBFK\"]},\"@daostack/arc/contracts/controller/Controller.sol\":{\"keccak256\":\"0xb46102ed94ae64c1c4cdb758e0f35b652f3bea6f7a32fa1fe988cbbeb489872a\",\"urls\":[\"bzz-raw://84e4f0fd93a10602ad6d331160ff5429107b74da9e684d96d32ee25aad6ab748\",\"dweb:/ipfs/QmPNu7s7x7reUY9tupW7bxNz5TY6Adu9tjRkj9x6X6ys55\"]},\"@daostack/arc/contracts/controller/ControllerInterface.sol\":{\"keccak256\":\"0x933e92612c90f292c7b59908958b003f1a13d90b97bed0572b566353c20974dc\",\"urls\":[\"bzz-raw://ce1fcf85b744fcce2dbd4205e3943e9b4ec36a5f0330d4bbf61e65f1a3e0e470\",\"dweb:/ipfs/QmUWiLkBDdekhpy93nTzBtxDHL6yNh6sTUM9G8VbsHcBzy\"]},\"@daostack/arc/contracts/controller/DAOToken.sol\":{\"keccak256\":\"0x9b213e4e3ceeffcfc1c962a43b70b8d763d8091a2dd713fc1989b97bb68786e6\",\"urls\":[\"bzz-raw://51d1d6e85fd90f45395a16b7a3c703c4636e836041f2a13f806e4222ef2e59c1\",\"dweb:/ipfs/QmQjeCeFf7TJzsYjT5scyZUDDixBA8Yy8YppgBuxcKPDnP\"]},\"@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol\":{\"keccak256\":\"0xc006c4591ec10b845a56e13f6791db2c428610953034686d52b2a934b6c8f36f\",\"urls\":[\"bzz-raw://19495cd88280e54d7ddcd043ffeff75e6d3777a0c42debcd61cae448e9497ea0\",\"dweb:/ipfs/QmYxWz7CgFmmddrcVXJKfob5Ktwykc2imNVUwLSR5WR8bJ\"]},\"@daostack/arc/contracts/libs/SafeERC20.sol\":{\"keccak256\":\"0xf6727d432f67046145b078f40c1cc4f6be7b0d12a6678ecaf457edf7550d244c\",\"urls\":[\"bzz-raw://5dba7734c4fed446c084a707761cbc66ba22b8b93ef53c8d4a22a76b6e271690\",\"dweb:/ipfs/QmP2VpPKUqLh4ZZs6LaxHVpCN1zCmiorygL9bMub4mbYCw\"]},\"@daostack/infra/contracts/Reputation.sol\":{\"keccak256\":\"0x3d226dac0fe7d758f0287fb28bc25fcec1f69d19888ae3a550fa49856d61c482\",\"urls\":[\"bzz-raw://8856852c8fe0ba1c9aab326f0a9a6e7f31a238de2778fa5188e6fc399f7eb352\",\"dweb:/ipfs/QmVH4ppR9Dk7v8yxaSgeArdMv9gBBVoQxEf4E3UsqQ4rY2\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzz-raw://1eb493553b27efd46c231a836a83ce50d215639feb97b4aac9f301d0fd034ff5\",\"dweb:/ipfs/QmbMdvSXcqGKxeeYvzF3VrWpoHQyVzMXBhzhAokF2Gdymv\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\",\"urls\":[\"bzz-raw://f07a2c393caa85f62f0aaa461e3edd50aa59371d4209778ba0558d7f8b4b856c\",\"dweb:/ipfs/QmeN3ZiYGSjCnQFeYaJNgoXjF9eDue1g3e9pqManRkeBtV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzz-raw://f40c91ca270bdc9b156f339081a0fc2bbcf73cf5f62b8c73ba555df753ff6619\",\"dweb:/ipfs/QmT8y2VVjGaFdGphpcXrgvdPi2EgF9LuCDgJiJ89LvpFRV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0xa3e68fd7f987c8fbdaf4867d428a69a15f3cf2f69709a5b0a0fbef750b0e6fbc\",\"urls\":[\"bzz-raw://50b1ff986d3b2793850a66c8429d9886fdfb134b1509b3e98714e3e2a71e24f5\",\"dweb:/ipfs/QmSQBYPeY9tbR3ciGRNQqvcWKnNiuxtVMq2MsPWpLwuGGm\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzz-raw://ee762ff5b7746e41d27dcbcea00c7a3034b58adb1b45ddadddb5b721aff450df\",\"dweb:/ipfs/QmdxqtgEFZjHCoiYyz6pUAQ5iBm7As25jcyEbZoTaAgyDa\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x5c731061b804fa256fc8c05150eafe5d20b6bb94541a8f187912bf84f7033f34\",\"urls\":[\"bzz-raw://a3c2d9f046beebab7fb41b1b124a6a124a36f510f7c67365861402ac831bdc71\",\"dweb:/ipfs/QmUtASRgitregbKH83anopLtF9vFQe3BKeAjhUa6F7t9YV\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620038e0380380620038e0833981810160405260208110156200003757600080fd5b5051600180546001600160a01b0319166001600160a01b03808416919091179182905560408051631c2eb17b60e31b8152905184939092169163e1758bd891600480820192602092909190829003018186803b1580156200009757600080fd5b505afa158015620000ac573d6000803e3d6000fd5b505050506040513d6020811015620000c357600080fd5b5051600280546001600160a01b0319166001600160a01b039283161790556001546040805163089ae1c960e41b8152905191909216916389ae1c90916004808301926020929190829003018186803b1580156200011f57600080fd5b505afa15801562000134573d6000803e3d6000fd5b505050506040513d60208110156200014b57600080fd5b5051600380546001600160a01b0319166001600160a01b0390921691909117905550506040805180820182526000808252601f60e01b6020808401918252338352829052928120915182559151600191909101805463ffffffff191660e09290921c91909117905561371c908190620001c490396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806389ae1c901161010f578063e08738da116100a2578063e8c98b2211610071578063e8c98b221461083e578063eaf994b21461085b578063f76488be1461088f578063fb4856a2146108bd576101e5565b8063e08738da1461078e578063e1758bd8146107bc578063e4537a74146107c4578063e869d45f146107fa576101e5565b8063b9a04cdd116100de578063b9a04cdd1461057f578063c9b62eb1146105bb578063d1b7089a14610634578063db6149ce14610746576101e5565b806389ae1c90146104d85780638da03997146104e05780639b51e35a146105065780639be2faed14610551576101e5565b806351803cd8116101875780636c525b13116101565780636c525b13146104195780636e94d2781461043f578063814784f614610473578063824f2f1f14610499576101e5565b806351803cd81461036d5780635aef7de6146103a9578063634965da146103b15780636407e432146103e5576101e5565b80633a02263c116101c35780633a02263c146102ad57806342427bf8146102d15780634422d372146102ff5780634f52b5be1461033f576101e5565b8063039de01d146101ea578063177eebb01461022c5780631c4d56081461026d575b600080fd5b6102186004803603604081101561020057600080fd5b506001600160a01b0381358116916020013516610903565b604080519115158252519081900360200190f35b6102526004803603602081101561024257600080fd5b50356001600160a01b0316610c09565b60408051921515835260208301919091528051918290030190f35b61029b6004803603604081101561028357600080fd5b506001600160a01b0381358116916020013516610c28565b60408051918252519081900360200190f35b6102b5610c6a565b604080516001600160a01b039092168252519081900360200190f35b610218600480360360408110156102e757600080fd5b506001600160a01b0381358116916020013516610c79565b61031c6004803603602081101561031557600080fd5b503561113b565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6102186004803603604081101561035557600080fd5b506001600160a01b0381358116916020013516611170565b6102186004803603608081101561038357600080fd5b506001600160a01b0381358116916020810135821691604082013591606001351661156b565b6102b561184f565b610218600480360360608110156103c757600080fd5b508035906001600160a01b036020820135811691604001351661185e565b610218600480360360608110156103fb57600080fd5b508035906001600160a01b0360208201358116916040013516611b25565b6102186004803603602081101561042f57600080fd5b50356001600160a01b0316611e24565b6102186004803603606081101561045557600080fd5b508035906001600160a01b0360208201358116916040013516611eab565b6102526004803603602081101561048957600080fd5b50356001600160a01b03166121ae565b6104bf600480360360208110156104af57600080fd5b50356001600160a01b03166121cd565b6040805192835260208301919091528051918290030190f35b6102b56121ff565b6102b5600480360360208110156104f657600080fd5b50356001600160a01b031661220e565b6105346004803603604081101561051c57600080fd5b506001600160a01b0381358116916020013516612240565b604080516001600160e01b03199092168252519081900360200190f35b6102186004803603604081101561056757600080fd5b506001600160a01b0381358116916020013516612283565b6102186004803603608081101561059557600080fd5b506001600160a01b0381358116916020810135821691604082013591606001351661228c565b610218600480360360408110156105d157600080fd5b8101906020810181356401000000008111156105ec57600080fd5b8201836020820111156105fe57600080fd5b8035906020019184600183028401116401000000008311171561062057600080fd5b9193509150356001600160a01b031661255e565b6106c36004803603608081101561064a57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561067557600080fd5b82018360208201111561068757600080fd5b803590602001918460018302840111640100000000831117156106a957600080fd5b91935091506001600160a01b03813516906020013561264e565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561070a5781810151838201526020016106f2565b50505050905090810190601f1680156107375780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b61076c6004803603602081101561075c57600080fd5b50356001600160a01b03166127e4565b604080519283526001600160e01b031990911660208301528051918290030190f35b61029b600480360360408110156107a457600080fd5b506001600160a01b0381358116916020013516612800565b6102b56128c6565b610218600480360360608110156107da57600080fd5b506001600160a01b038135811691602081013591604090910135166128d5565b6102186004803603608081101561081057600080fd5b506001600160a01b0381358116916020810135916001600160e01b0319604083013516916060013516612ca1565b61031c6004803603602081101561085457600080fd5b5035612fde565b6102186004803603606081101561087157600080fd5b508035906001600160a01b0360208201358116916040013516612feb565b610218600480360360408110156108a557600080fd5b506001600160a01b03813581169160200135166132ee565b610218600480360360a08110156108d357600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359160809091013516613354565b3360009081526020819052604081206001015460e01b600160e11b9081161461092b57600080fd5b6f756e7265676973746572536368656d6560801b60005b600554811015610a32576005818154811061095957fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061098c57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156109f557600080fd5b505af1158015610a09573d6000803e3d6000fd5b505050506040513d6020811015610a1f57600080fd5b5051610a2a57600080fd5b600101610942565b60015484906001600160a01b03808316911614610a4e57600080fd5b610a5786613641565b610a645760009350610b0b565b336000908152602081905260408082206001908101546001600160a01b038a168452919092209091015460e091821b19911b16601f60e01b1615610aa757600080fd5b6040516001600160a01b0387169033907f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf90600090a36001600160a01b03861660009081526020819052604081209081556001908101805463ffffffff1916905593505b50600090505b600654811015610c015760068181548110610b2857fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d91339185908110610b5b57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015610bc457600080fd5b505af1158015610bd8573d6000803e3d6000fd5b505050506040513d6020811015610bee57600080fd5b5051610bf957600080fd5b600101610b11565b505092915050565b6007602052600090815260409020805460019091015460ff9091169082565b60015460009082906001600160a01b03808316911614610c4757600080fd5b6001600160a01b03841660009081526020819052604090205491505b5092915050565b6004546001600160a01b031681565b3360009081526020819052604081206001015460e01b600160e31b90811614610ca157600080fd5b60015482906001600160a01b03808316911614610cbd57600080fd5b6004546001600160a01b031615610cd357600080fd5b6001600160a01b038416610ce657600080fd5b600480546001600160a01b0319166001600160a01b0386811691821783556001546040805163f2fde38b60e01b815294850193909352915191169163f2fde38b91602480830192600092919082900301818387803b158015610d4757600080fd5b505af1158015610d5b573d6000803e3d6000fd5b50505050836001600160a01b0316600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610db757600080fd5b505afa158015610dcb573d6000803e3d6000fd5b505050506040513d6020811015610de157600080fd5b50516001600160a01b031614610df657600080fd5b60025460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015610e3a57600080fd5b505afa158015610e4e573d6000803e3d6000fd5b505050506040513d6020811015610e6457600080fd5b50516001600160a01b03161415610f72576002546040805163f2fde38b60e01b81526001600160a01b0387811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015610ec357600080fd5b505af1158015610ed7573d6000803e3d6000fd5b50505050836001600160a01b0316600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3357600080fd5b505afa158015610f47573d6000803e3d6000fd5b505050506040513d6020811015610f5d57600080fd5b50516001600160a01b031614610f7257600080fd5b60035460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015610fb657600080fd5b505afa158015610fca573d6000803e3d6000fd5b505050506040513d6020811015610fe057600080fd5b50516001600160a01b031614156110ee576003546040805163f2fde38b60e01b81526001600160a01b0387811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b15801561103f57600080fd5b505af1158015611053573d6000803e3d6000fd5b50505050836001600160a01b0316600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110af57600080fd5b505afa1580156110c3573d6000803e3d6000fd5b505050506040513d60208110156110d957600080fd5b50516001600160a01b0316146110ee57600080fd5b600454604080516001600160a01b039290921682525130917fdb7cbacf8df312d794506c0cc9af07f64d29ca075796ea2e950a3832cc9a63dd919081900360200190a25060019392505050565b6005818154811061114857fe5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b3360009081526020819052604081206001015460e01b600160e21b9081161461119857600080fd5b60015482906001600160a01b038083169116146111b457600080fd5b6111bc61366d565b6111c461366d565b6000866001600160a01b031663e2b0caef6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561120157600080fd5b505af1158015611215573d6000803e3d6000fd5b505050506040513d602081101561122b57600080fd5b5051905060008082600281111561123e57fe5b14806112555750600282600281111561125357fe5b145b15611399576001600160a01b0388166000908152600760209081526040918290208251808401909352805460ff16158015845260019091015491830191909152909450611399576001600580549050038460200151101561135a576005805460001981019081106112c257fe5b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101548183015290850151600580549295508592909190811061130a57fe5b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001948501558781015187519092168352600790526040909120909101555b600580549061136d906000198301613684565b50506001600160a01b0387166000908152600760205260408120805460ff191681556001908101919091555b60018260028111156113a757fe5b14806113be575060028260028111156113bc57fe5b145b15611502576001600160a01b0388166000908152600860209081526040918290208251808401909352805460ff1615801584526001909101549183019190915290945061150257600160068054905003846020015110156114c35760068054600019810190811061142b57fe5b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101548183015290850151600680549295508592909190811061147357fe5b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001948501558781015187519092168352600890526040909120909101555b60068054906114d6906000198301613684565b50506001600160a01b0387166000908152600860205260408120805460ff191681556001908101919091555b80156115605760208401516001600160a01b038916907fcdf1a50ea6b7de555bd409f8a4a53ea43c6dc6b4caa961889da9e005f21bbaa990600085600281111561154857fe5b60408051938452911460208301528051918290030190a25b979650505050505050565b3360009081526020819052604081206001015460e01b600160e01b9081161461159357600080fd5b7f65787465726e616c546f6b656e496e637265617365417070726f76616c00000060005b6005548110156116a757600581815481106115ce57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061160157fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561166a57600080fd5b505af115801561167e573d6000803e3d6000fd5b505050506040513d602081101561169457600080fd5b505161169f57600080fd5b6001016115b7565b60015484906001600160a01b038083169116146116c357600080fd5b6001546040805163ab751f7160e01b81526001600160a01b038b811660048301528a81166024830152604482018a90529151919092169163ab751f719160648083019260209291908290030181600087803b15801561172157600080fd5b505af1158015611735573d6000803e3d6000fd5b505050506040513d602081101561174b57600080fd5b5051935050600090505b600654811015611845576006818154811061176c57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d9133918590811061179f57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561180857600080fd5b505af115801561181c573d6000803e3d6000fd5b505050506040513d602081101561183257600080fd5b505161183d57600080fd5b600101611755565b5050949350505050565b6001546001600160a01b031681565b3360009081526020819052604081206001015460e01b600160e01b9081161461188657600080fd5b6839b2b73222ba3432b960b91b60005b60055481101561198657600581815481106118ad57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab2913391859081106118e057fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561194957600080fd5b505af115801561195d573d6000803e3d6000fd5b505050506040513d602081101561197357600080fd5b505161197e57600080fd5b600101611896565b60015484906001600160a01b038083169116146119a257600080fd5b6001546040805163658b6a5160e11b8152600481018a90526001600160a01b0389811660248301529151919092169163cb16d4a29160448083019260209291908290030181600087803b1580156119f857600080fd5b505af1158015611a0c573d6000803e3d6000fd5b505050506040513d6020811015611a2257600080fd5b5051935050600090505b600654811015611b1c5760068181548110611a4357fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d91339185908110611a7657fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611adf57600080fd5b505af1158015611af3573d6000803e3d6000fd5b505050506040513d6020811015611b0957600080fd5b5051611b1457600080fd5b600101611a2c565b50509392505050565b3360009081526020819052604081206001015460e01b600160e01b90811614611b4d57600080fd5b696d696e74546f6b656e7360b01b60005b600554811015611c4e5760058181548110611b7557fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab291339185908110611ba857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611c1157600080fd5b505af1158015611c25573d6000803e3d6000fd5b505050506040513d6020811015611c3b57600080fd5b5051611c4657600080fd5b600101611b5e565b60015484906001600160a01b03808316911614611c6a57600080fd5b6040805188815290516001600160a01b0388169133917f21f9c9a1a1f9a311a50f15fec5c1faa9e21fc9edf964f0fdecba5bd490484c5e9181900360200190a3600254604080516340c10f1960e01b81526001600160a01b038981166004830152602482018b9052915191909216916340c10f199160448083019260209291908290030181600087803b158015611d0057600080fd5b505af1158015611d14573d6000803e3d6000fd5b505050506040513d6020811015611d2a57600080fd5b5051935050600090505b600654811015611b1c5760068181548110611d4b57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d91339185908110611d7e57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611de757600080fd5b505af1158015611dfb573d6000803e3d6000fd5b505050506040513d6020811015611e1157600080fd5b5051611e1c57600080fd5b600101611d34565b60015460009082906001600160a01b03808316911614611e4357600080fd5b611e4c33613641565b611e595760009150611ea5565b33600081815260208190526040808220828155600101805463ffffffff191690555182917f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf91a3600191505b50919050565b3360009081526020819052604081206001015460e01b600160e01b90811614611ed357600080fd5b6d313ab9372932b83aba30ba34b7b760911b60005b600554811015611fd85760058181548110611eff57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab291339185908110611f3257fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611f9b57600080fd5b505af1158015611faf573d6000803e3d6000fd5b505050506040513d6020811015611fc557600080fd5b5051611fd057600080fd5b600101611ee8565b60015484906001600160a01b03808316911614611ff457600080fd5b6040805188815290516001600160a01b0388169133917f186d8887e1b22f9d9b16849c36baa748950d09d9c9b67a4a6ea140eaad00c21c9181900360200190a360035460408051632770a7eb60e21b81526001600160a01b038981166004830152602482018b905291519190921691639dc29fac9160448083019260209291908290030181600087803b15801561208a57600080fd5b505af115801561209e573d6000803e3d6000fd5b505050506040513d60208110156120b457600080fd5b5051935050600090505b600654811015611b1c57600681815481106120d557fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d9133918590811061210857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561217157600080fd5b505af1158015612185573d6000803e3d6000fd5b505050506040513d602081101561219b57600080fd5b50516121a657600080fd5b6001016120be565b6008602052600090815260409020805460019091015460ff9091169082565b600154600090819083906001600160a01b038083169116146121ee57600080fd5b600554600654909350915050915091565b6003546001600160a01b031681565b60015460009082906001600160a01b0380831691161461222d57600080fd5b50506003546001600160a01b0316919050565b60015460009082906001600160a01b0380831691161461225f57600080fd5b5050506001600160a01b031660009081526020819052604090206001015460e01b90565b60015b92915050565b3360009081526020819052604081206001015460e01b600160e01b908116146122b457600080fd5b7432bc3a32b93730b62a37b5b2b72a3930b739b332b960591b60005b6005548110156123c057600581815481106122e757fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061231a57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561238357600080fd5b505af1158015612397573d6000803e3d6000fd5b505050506040513d60208110156123ad57600080fd5b50516123b857600080fd5b6001016122d0565b60015484906001600160a01b038083169116146123dc57600080fd5b6001546040805163dab0efff60e01b81526001600160a01b038b811660048301528a81166024830152604482018a90529151919092169163dab0efff9160648083019260209291908290030181600087803b15801561243a57600080fd5b505af115801561244e573d6000803e3d6000fd5b505050506040513d602081101561246457600080fd5b5051935050600090505b600654811015611845576006818154811061248557fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d913391859081106124b857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561252157600080fd5b505af1158015612535573d6000803e3d6000fd5b505050506040513d602081101561254b57600080fd5b505161255657600080fd5b60010161246e565b3360009081526020819052604081206001015460e01b600160e41b9081161461258657600080fd5b60015482906001600160a01b038083169116146125a257600080fd5b600154604051632242b11b60e21b8152602060048201908152602482018790526001600160a01b039092169163890ac46c91889188918190604401848480828437600081840152601f19601f8201169050808301925050509350505050602060405180830381600087803b15801561261957600080fd5b505af115801561262d573d6000803e3d6000fd5b505050506040513d602081101561264357600080fd5b505195945050505050565b60015460405163057e2c8b60e31b81526001600160a01b0387811660048301908152604483018590526060602484018181526064850189905260009591949390911692632bf16458928b928b928b928a929091608401858580828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156126e257600080fd5b505af11580156126f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604090815281101561271f57600080fd5b81516020830180516040519294929383019291908464010000000082111561274657600080fd5b90830190602082018581111561275b57600080fd5b825164010000000081118282018810171561277557600080fd5b82525081516020918201929091019080838360005b838110156127a257818101518382015260200161278a565b50505050905090810190601f1680156127cf5780820380516001836020036101000a031916815260200191505b50604052505050915091509550959350505050565b6000602081905290815260409020805460019091015460e01b82565b600061280a61366d565b506001600160a01b0383166000908152600760209081526040918290208251808401909352805460ff1615801584526001909101549183019190915261287557600581602001518154811061285b57fe5b906000526020600020906002020160010154915050612286565b506001600160a01b0383166000908152600860209081526040918290208251808401909352805460ff16158015845260019091015491830191909152610c6357600681602001518154811061285b57fe5b6002546001600160a01b031681565b3360009081526020819052604081206001015460e01b600160e21b908116146128fd57600080fd5b60015482906001600160a01b0380831691161461291957600080fd5b6000856001600160a01b031663e2b0caef6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561295657600080fd5b505af115801561296a573d6000803e3d6000fd5b505050506040513d602081101561298057600080fd5b50519050600081600281111561299257fe5b14806129a9575060028160028111156129a757fe5b145b15612ae1576001600160a01b03861660009081526007602052604090205460ff16612aa0576040805180820182526001600160a01b0388811680835260208084018a81526005805460018082018355600083815297517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600290930292830180546001600160a01b031916919098161790965591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db190920191909155855180870187528481529054600019018183019081529285526007909152939092209251835460ff19169015151783559051910155612ae1565b6001600160a01b038616600090815260076020526040902060010154600580548792908110612acb57fe5b9060005260206000209060020201600101819055505b6001816002811115612aef57fe5b1480612b0657506002816002811115612b0457fe5b145b15612c3e576001600160a01b03861660009081526008602052604090205460ff16612bfd576040805180820182526001600160a01b0388811680835260208084018a81526006805460018082018355600083815297517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600290930292830180546001600160a01b031916919098161790965591517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090920191909155855180870187528481529054600019018183019081529285526008909152939092209251835460ff19169015151783559051910155612c3e565b6001600160a01b038616600090815260086020526040902060010154600680548792908110612c2857fe5b9060005260206000209060020201600101819055505b856001600160a01b03167f78800d7333b8d0174a0845569e3913b7ce4a3c03ca444dd9904172fc14f2fdad868360405180838152602001826002811115612c8157fe5b60ff1681526020019250505060405180910390a250600195945050505050565b3360009081526020819052604081206001015460e01b600160e11b90811614612cc957600080fd5b6d7265676973746572536368656d6560901b60005b600554811015612dce5760058181548110612cf557fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab291339185908110612d2857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015612d9157600080fd5b505af1158015612da5573d6000803e3d6000fd5b505050506040513d6020811015612dbb57600080fd5b5051612dc657600080fd5b600101612cde565b60015484906001600160a01b03808316911614612dea57600080fd5b612df261366d565b506001600160a01b03881660009081526020818152604080832081518083018352815481526001918201546001600160e01b031960e091821b16828601908152338752948690529290942001549151891891901b1916601f60e01b1615612e5857600080fd5b336000908152602081815260409091206001015490820151601f60e01b60e09290921b19161615612e8857600080fd5b6001600160a01b0389166000818152602081905260408082208b8155600101805463ffffffff1916600160e01b8c1760e01c1790555133917f546816e99403df442acb68ef69562682a50762c20a3fb6b472f7af9923736cfc91a3600194505050600090505b6006548110156118455760068181548110612f0557fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d91339185908110612f3857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015612fa157600080fd5b505af1158015612fb5573d6000803e3d6000fd5b505050506040513d6020811015612fcb57600080fd5b5051612fd657600080fd5b600101612eee565b6006818154811061114857fe5b3360009081526020819052604081206001015460e01b600160e01b9081161461301357600080fd5b6d36b4b73a2932b83aba30ba34b7b760911b60005b600554811015613118576005818154811061303f57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061307257fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156130db57600080fd5b505af11580156130ef573d6000803e3d6000fd5b505050506040513d602081101561310557600080fd5b505161311057600080fd5b600101613028565b60015484906001600160a01b0380831691161461313457600080fd5b6040805188815290516001600160a01b0388169133917f837f2931e3df0592458212be4e470025f197feb7a8e39deb5b7f1f1d42e6f2629181900360200190a3600354604080516340c10f1960e01b81526001600160a01b038981166004830152602482018b9052915191909216916340c10f199160448083019260209291908290030181600087803b1580156131ca57600080fd5b505af11580156131de573d6000803e3d6000fd5b505050506040513d60208110156131f457600080fd5b5051935050600090505b600654811015611b1c576006818154811061321557fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d9133918590811061324857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156132b157600080fd5b505af11580156132c5573d6000803e3d6000fd5b505050506040513d60208110156132db57600080fd5b50516132e657600080fd5b6001016131fe565b60015460009082906001600160a01b0380831691161461330d57600080fd5b6001600160a01b03841660009081526007602052604090205460ff168061334c57506001600160a01b03841660009081526008602052604090205460ff165b949350505050565b3360009081526020819052604081206001015460e01b600160e01b9081161461337c57600080fd5b7f65787465726e616c546f6b656e5472616e7366657246726f6d0000000000000060005b60055481101561349057600581815481106133b757fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab2913391859081106133ea57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561345357600080fd5b505af1158015613467573d6000803e3d6000fd5b505050506040513d602081101561347d57600080fd5b505161348857600080fd5b6001016133a0565b60015484906001600160a01b038083169116146134ac57600080fd5b60015460408051635bab6ad160e11b81526001600160a01b038c811660048301528b811660248301528a81166044830152606482018a90529151919092169163b756d5a29160848083019260209291908290030181600087803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b505050506040513d602081101561353c57600080fd5b5051935050600090505b600654811015613636576006818154811061355d57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d9133918590811061359057fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156135f957600080fd5b505af115801561360d573d6000803e3d6000fd5b505050506040513d602081101561362357600080fd5b505161362e57600080fd5b600101613546565b505095945050505050565b6001600160a01b03811660009081526020819052604090206001015460e01b600160e01b161515919050565b604080518082019091526000808252602082015290565b8154818355818111156136b0576002028160020283600052602060002091820191016136b091906136b5565b505050565b6136e491905b808211156136e05780546001600160a01b0319168155600060018201556002016136bb565b5090565b9056fea265627a7a7231582074a1ce80db362ff5a7253926eb534cb9b3a6fb7a887930d7d6e293e23269601464736f6c63430005100032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806389ae1c901161010f578063e08738da116100a2578063e8c98b2211610071578063e8c98b221461083e578063eaf994b21461085b578063f76488be1461088f578063fb4856a2146108bd576101e5565b8063e08738da1461078e578063e1758bd8146107bc578063e4537a74146107c4578063e869d45f146107fa576101e5565b8063b9a04cdd116100de578063b9a04cdd1461057f578063c9b62eb1146105bb578063d1b7089a14610634578063db6149ce14610746576101e5565b806389ae1c90146104d85780638da03997146104e05780639b51e35a146105065780639be2faed14610551576101e5565b806351803cd8116101875780636c525b13116101565780636c525b13146104195780636e94d2781461043f578063814784f614610473578063824f2f1f14610499576101e5565b806351803cd81461036d5780635aef7de6146103a9578063634965da146103b15780636407e432146103e5576101e5565b80633a02263c116101c35780633a02263c146102ad57806342427bf8146102d15780634422d372146102ff5780634f52b5be1461033f576101e5565b8063039de01d146101ea578063177eebb01461022c5780631c4d56081461026d575b600080fd5b6102186004803603604081101561020057600080fd5b506001600160a01b0381358116916020013516610903565b604080519115158252519081900360200190f35b6102526004803603602081101561024257600080fd5b50356001600160a01b0316610c09565b60408051921515835260208301919091528051918290030190f35b61029b6004803603604081101561028357600080fd5b506001600160a01b0381358116916020013516610c28565b60408051918252519081900360200190f35b6102b5610c6a565b604080516001600160a01b039092168252519081900360200190f35b610218600480360360408110156102e757600080fd5b506001600160a01b0381358116916020013516610c79565b61031c6004803603602081101561031557600080fd5b503561113b565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6102186004803603604081101561035557600080fd5b506001600160a01b0381358116916020013516611170565b6102186004803603608081101561038357600080fd5b506001600160a01b0381358116916020810135821691604082013591606001351661156b565b6102b561184f565b610218600480360360608110156103c757600080fd5b508035906001600160a01b036020820135811691604001351661185e565b610218600480360360608110156103fb57600080fd5b508035906001600160a01b0360208201358116916040013516611b25565b6102186004803603602081101561042f57600080fd5b50356001600160a01b0316611e24565b6102186004803603606081101561045557600080fd5b508035906001600160a01b0360208201358116916040013516611eab565b6102526004803603602081101561048957600080fd5b50356001600160a01b03166121ae565b6104bf600480360360208110156104af57600080fd5b50356001600160a01b03166121cd565b6040805192835260208301919091528051918290030190f35b6102b56121ff565b6102b5600480360360208110156104f657600080fd5b50356001600160a01b031661220e565b6105346004803603604081101561051c57600080fd5b506001600160a01b0381358116916020013516612240565b604080516001600160e01b03199092168252519081900360200190f35b6102186004803603604081101561056757600080fd5b506001600160a01b0381358116916020013516612283565b6102186004803603608081101561059557600080fd5b506001600160a01b0381358116916020810135821691604082013591606001351661228c565b610218600480360360408110156105d157600080fd5b8101906020810181356401000000008111156105ec57600080fd5b8201836020820111156105fe57600080fd5b8035906020019184600183028401116401000000008311171561062057600080fd5b9193509150356001600160a01b031661255e565b6106c36004803603608081101561064a57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561067557600080fd5b82018360208201111561068757600080fd5b803590602001918460018302840111640100000000831117156106a957600080fd5b91935091506001600160a01b03813516906020013561264e565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561070a5781810151838201526020016106f2565b50505050905090810190601f1680156107375780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b61076c6004803603602081101561075c57600080fd5b50356001600160a01b03166127e4565b604080519283526001600160e01b031990911660208301528051918290030190f35b61029b600480360360408110156107a457600080fd5b506001600160a01b0381358116916020013516612800565b6102b56128c6565b610218600480360360608110156107da57600080fd5b506001600160a01b038135811691602081013591604090910135166128d5565b6102186004803603608081101561081057600080fd5b506001600160a01b0381358116916020810135916001600160e01b0319604083013516916060013516612ca1565b61031c6004803603602081101561085457600080fd5b5035612fde565b6102186004803603606081101561087157600080fd5b508035906001600160a01b0360208201358116916040013516612feb565b610218600480360360408110156108a557600080fd5b506001600160a01b03813581169160200135166132ee565b610218600480360360a08110156108d357600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359160809091013516613354565b3360009081526020819052604081206001015460e01b600160e11b9081161461092b57600080fd5b6f756e7265676973746572536368656d6560801b60005b600554811015610a32576005818154811061095957fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061098c57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156109f557600080fd5b505af1158015610a09573d6000803e3d6000fd5b505050506040513d6020811015610a1f57600080fd5b5051610a2a57600080fd5b600101610942565b60015484906001600160a01b03808316911614610a4e57600080fd5b610a5786613641565b610a645760009350610b0b565b336000908152602081905260408082206001908101546001600160a01b038a168452919092209091015460e091821b19911b16601f60e01b1615610aa757600080fd5b6040516001600160a01b0387169033907f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf90600090a36001600160a01b03861660009081526020819052604081209081556001908101805463ffffffff1916905593505b50600090505b600654811015610c015760068181548110610b2857fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d91339185908110610b5b57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015610bc457600080fd5b505af1158015610bd8573d6000803e3d6000fd5b505050506040513d6020811015610bee57600080fd5b5051610bf957600080fd5b600101610b11565b505092915050565b6007602052600090815260409020805460019091015460ff9091169082565b60015460009082906001600160a01b03808316911614610c4757600080fd5b6001600160a01b03841660009081526020819052604090205491505b5092915050565b6004546001600160a01b031681565b3360009081526020819052604081206001015460e01b600160e31b90811614610ca157600080fd5b60015482906001600160a01b03808316911614610cbd57600080fd5b6004546001600160a01b031615610cd357600080fd5b6001600160a01b038416610ce657600080fd5b600480546001600160a01b0319166001600160a01b0386811691821783556001546040805163f2fde38b60e01b815294850193909352915191169163f2fde38b91602480830192600092919082900301818387803b158015610d4757600080fd5b505af1158015610d5b573d6000803e3d6000fd5b50505050836001600160a01b0316600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610db757600080fd5b505afa158015610dcb573d6000803e3d6000fd5b505050506040513d6020811015610de157600080fd5b50516001600160a01b031614610df657600080fd5b60025460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015610e3a57600080fd5b505afa158015610e4e573d6000803e3d6000fd5b505050506040513d6020811015610e6457600080fd5b50516001600160a01b03161415610f72576002546040805163f2fde38b60e01b81526001600160a01b0387811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015610ec357600080fd5b505af1158015610ed7573d6000803e3d6000fd5b50505050836001600160a01b0316600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3357600080fd5b505afa158015610f47573d6000803e3d6000fd5b505050506040513d6020811015610f5d57600080fd5b50516001600160a01b031614610f7257600080fd5b60035460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015610fb657600080fd5b505afa158015610fca573d6000803e3d6000fd5b505050506040513d6020811015610fe057600080fd5b50516001600160a01b031614156110ee576003546040805163f2fde38b60e01b81526001600160a01b0387811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b15801561103f57600080fd5b505af1158015611053573d6000803e3d6000fd5b50505050836001600160a01b0316600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110af57600080fd5b505afa1580156110c3573d6000803e3d6000fd5b505050506040513d60208110156110d957600080fd5b50516001600160a01b0316146110ee57600080fd5b600454604080516001600160a01b039290921682525130917fdb7cbacf8df312d794506c0cc9af07f64d29ca075796ea2e950a3832cc9a63dd919081900360200190a25060019392505050565b6005818154811061114857fe5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b3360009081526020819052604081206001015460e01b600160e21b9081161461119857600080fd5b60015482906001600160a01b038083169116146111b457600080fd5b6111bc61366d565b6111c461366d565b6000866001600160a01b031663e2b0caef6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561120157600080fd5b505af1158015611215573d6000803e3d6000fd5b505050506040513d602081101561122b57600080fd5b5051905060008082600281111561123e57fe5b14806112555750600282600281111561125357fe5b145b15611399576001600160a01b0388166000908152600760209081526040918290208251808401909352805460ff16158015845260019091015491830191909152909450611399576001600580549050038460200151101561135a576005805460001981019081106112c257fe5b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101548183015290850151600580549295508592909190811061130a57fe5b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001948501558781015187519092168352600790526040909120909101555b600580549061136d906000198301613684565b50506001600160a01b0387166000908152600760205260408120805460ff191681556001908101919091555b60018260028111156113a757fe5b14806113be575060028260028111156113bc57fe5b145b15611502576001600160a01b0388166000908152600860209081526040918290208251808401909352805460ff1615801584526001909101549183019190915290945061150257600160068054905003846020015110156114c35760068054600019810190811061142b57fe5b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101548183015290850151600680549295508592909190811061147357fe5b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001948501558781015187519092168352600890526040909120909101555b60068054906114d6906000198301613684565b50506001600160a01b0387166000908152600860205260408120805460ff191681556001908101919091555b80156115605760208401516001600160a01b038916907fcdf1a50ea6b7de555bd409f8a4a53ea43c6dc6b4caa961889da9e005f21bbaa990600085600281111561154857fe5b60408051938452911460208301528051918290030190a25b979650505050505050565b3360009081526020819052604081206001015460e01b600160e01b9081161461159357600080fd5b7f65787465726e616c546f6b656e496e637265617365417070726f76616c00000060005b6005548110156116a757600581815481106115ce57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061160157fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561166a57600080fd5b505af115801561167e573d6000803e3d6000fd5b505050506040513d602081101561169457600080fd5b505161169f57600080fd5b6001016115b7565b60015484906001600160a01b038083169116146116c357600080fd5b6001546040805163ab751f7160e01b81526001600160a01b038b811660048301528a81166024830152604482018a90529151919092169163ab751f719160648083019260209291908290030181600087803b15801561172157600080fd5b505af1158015611735573d6000803e3d6000fd5b505050506040513d602081101561174b57600080fd5b5051935050600090505b600654811015611845576006818154811061176c57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d9133918590811061179f57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561180857600080fd5b505af115801561181c573d6000803e3d6000fd5b505050506040513d602081101561183257600080fd5b505161183d57600080fd5b600101611755565b5050949350505050565b6001546001600160a01b031681565b3360009081526020819052604081206001015460e01b600160e01b9081161461188657600080fd5b6839b2b73222ba3432b960b91b60005b60055481101561198657600581815481106118ad57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab2913391859081106118e057fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561194957600080fd5b505af115801561195d573d6000803e3d6000fd5b505050506040513d602081101561197357600080fd5b505161197e57600080fd5b600101611896565b60015484906001600160a01b038083169116146119a257600080fd5b6001546040805163658b6a5160e11b8152600481018a90526001600160a01b0389811660248301529151919092169163cb16d4a29160448083019260209291908290030181600087803b1580156119f857600080fd5b505af1158015611a0c573d6000803e3d6000fd5b505050506040513d6020811015611a2257600080fd5b5051935050600090505b600654811015611b1c5760068181548110611a4357fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d91339185908110611a7657fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611adf57600080fd5b505af1158015611af3573d6000803e3d6000fd5b505050506040513d6020811015611b0957600080fd5b5051611b1457600080fd5b600101611a2c565b50509392505050565b3360009081526020819052604081206001015460e01b600160e01b90811614611b4d57600080fd5b696d696e74546f6b656e7360b01b60005b600554811015611c4e5760058181548110611b7557fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab291339185908110611ba857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611c1157600080fd5b505af1158015611c25573d6000803e3d6000fd5b505050506040513d6020811015611c3b57600080fd5b5051611c4657600080fd5b600101611b5e565b60015484906001600160a01b03808316911614611c6a57600080fd5b6040805188815290516001600160a01b0388169133917f21f9c9a1a1f9a311a50f15fec5c1faa9e21fc9edf964f0fdecba5bd490484c5e9181900360200190a3600254604080516340c10f1960e01b81526001600160a01b038981166004830152602482018b9052915191909216916340c10f199160448083019260209291908290030181600087803b158015611d0057600080fd5b505af1158015611d14573d6000803e3d6000fd5b505050506040513d6020811015611d2a57600080fd5b5051935050600090505b600654811015611b1c5760068181548110611d4b57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d91339185908110611d7e57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611de757600080fd5b505af1158015611dfb573d6000803e3d6000fd5b505050506040513d6020811015611e1157600080fd5b5051611e1c57600080fd5b600101611d34565b60015460009082906001600160a01b03808316911614611e4357600080fd5b611e4c33613641565b611e595760009150611ea5565b33600081815260208190526040808220828155600101805463ffffffff191690555182917f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf91a3600191505b50919050565b3360009081526020819052604081206001015460e01b600160e01b90811614611ed357600080fd5b6d313ab9372932b83aba30ba34b7b760911b60005b600554811015611fd85760058181548110611eff57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab291339185908110611f3257fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015611f9b57600080fd5b505af1158015611faf573d6000803e3d6000fd5b505050506040513d6020811015611fc557600080fd5b5051611fd057600080fd5b600101611ee8565b60015484906001600160a01b03808316911614611ff457600080fd5b6040805188815290516001600160a01b0388169133917f186d8887e1b22f9d9b16849c36baa748950d09d9c9b67a4a6ea140eaad00c21c9181900360200190a360035460408051632770a7eb60e21b81526001600160a01b038981166004830152602482018b905291519190921691639dc29fac9160448083019260209291908290030181600087803b15801561208a57600080fd5b505af115801561209e573d6000803e3d6000fd5b505050506040513d60208110156120b457600080fd5b5051935050600090505b600654811015611b1c57600681815481106120d557fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d9133918590811061210857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561217157600080fd5b505af1158015612185573d6000803e3d6000fd5b505050506040513d602081101561219b57600080fd5b50516121a657600080fd5b6001016120be565b6008602052600090815260409020805460019091015460ff9091169082565b600154600090819083906001600160a01b038083169116146121ee57600080fd5b600554600654909350915050915091565b6003546001600160a01b031681565b60015460009082906001600160a01b0380831691161461222d57600080fd5b50506003546001600160a01b0316919050565b60015460009082906001600160a01b0380831691161461225f57600080fd5b5050506001600160a01b031660009081526020819052604090206001015460e01b90565b60015b92915050565b3360009081526020819052604081206001015460e01b600160e01b908116146122b457600080fd5b7432bc3a32b93730b62a37b5b2b72a3930b739b332b960591b60005b6005548110156123c057600581815481106122e757fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061231a57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561238357600080fd5b505af1158015612397573d6000803e3d6000fd5b505050506040513d60208110156123ad57600080fd5b50516123b857600080fd5b6001016122d0565b60015484906001600160a01b038083169116146123dc57600080fd5b6001546040805163dab0efff60e01b81526001600160a01b038b811660048301528a81166024830152604482018a90529151919092169163dab0efff9160648083019260209291908290030181600087803b15801561243a57600080fd5b505af115801561244e573d6000803e3d6000fd5b505050506040513d602081101561246457600080fd5b5051935050600090505b600654811015611845576006818154811061248557fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d913391859081106124b857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561252157600080fd5b505af1158015612535573d6000803e3d6000fd5b505050506040513d602081101561254b57600080fd5b505161255657600080fd5b60010161246e565b3360009081526020819052604081206001015460e01b600160e41b9081161461258657600080fd5b60015482906001600160a01b038083169116146125a257600080fd5b600154604051632242b11b60e21b8152602060048201908152602482018790526001600160a01b039092169163890ac46c91889188918190604401848480828437600081840152601f19601f8201169050808301925050509350505050602060405180830381600087803b15801561261957600080fd5b505af115801561262d573d6000803e3d6000fd5b505050506040513d602081101561264357600080fd5b505195945050505050565b60015460405163057e2c8b60e31b81526001600160a01b0387811660048301908152604483018590526060602484018181526064850189905260009591949390911692632bf16458928b928b928b928a929091608401858580828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156126e257600080fd5b505af11580156126f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604090815281101561271f57600080fd5b81516020830180516040519294929383019291908464010000000082111561274657600080fd5b90830190602082018581111561275b57600080fd5b825164010000000081118282018810171561277557600080fd5b82525081516020918201929091019080838360005b838110156127a257818101518382015260200161278a565b50505050905090810190601f1680156127cf5780820380516001836020036101000a031916815260200191505b50604052505050915091509550959350505050565b6000602081905290815260409020805460019091015460e01b82565b600061280a61366d565b506001600160a01b0383166000908152600760209081526040918290208251808401909352805460ff1615801584526001909101549183019190915261287557600581602001518154811061285b57fe5b906000526020600020906002020160010154915050612286565b506001600160a01b0383166000908152600860209081526040918290208251808401909352805460ff16158015845260019091015491830191909152610c6357600681602001518154811061285b57fe5b6002546001600160a01b031681565b3360009081526020819052604081206001015460e01b600160e21b908116146128fd57600080fd5b60015482906001600160a01b0380831691161461291957600080fd5b6000856001600160a01b031663e2b0caef6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561295657600080fd5b505af115801561296a573d6000803e3d6000fd5b505050506040513d602081101561298057600080fd5b50519050600081600281111561299257fe5b14806129a9575060028160028111156129a757fe5b145b15612ae1576001600160a01b03861660009081526007602052604090205460ff16612aa0576040805180820182526001600160a01b0388811680835260208084018a81526005805460018082018355600083815297517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600290930292830180546001600160a01b031916919098161790965591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db190920191909155855180870187528481529054600019018183019081529285526007909152939092209251835460ff19169015151783559051910155612ae1565b6001600160a01b038616600090815260076020526040902060010154600580548792908110612acb57fe5b9060005260206000209060020201600101819055505b6001816002811115612aef57fe5b1480612b0657506002816002811115612b0457fe5b145b15612c3e576001600160a01b03861660009081526008602052604090205460ff16612bfd576040805180820182526001600160a01b0388811680835260208084018a81526006805460018082018355600083815297517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600290930292830180546001600160a01b031916919098161790965591517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090920191909155855180870187528481529054600019018183019081529285526008909152939092209251835460ff19169015151783559051910155612c3e565b6001600160a01b038616600090815260086020526040902060010154600680548792908110612c2857fe5b9060005260206000209060020201600101819055505b856001600160a01b03167f78800d7333b8d0174a0845569e3913b7ce4a3c03ca444dd9904172fc14f2fdad868360405180838152602001826002811115612c8157fe5b60ff1681526020019250505060405180910390a250600195945050505050565b3360009081526020819052604081206001015460e01b600160e11b90811614612cc957600080fd5b6d7265676973746572536368656d6560901b60005b600554811015612dce5760058181548110612cf557fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab291339185908110612d2857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015612d9157600080fd5b505af1158015612da5573d6000803e3d6000fd5b505050506040513d6020811015612dbb57600080fd5b5051612dc657600080fd5b600101612cde565b60015484906001600160a01b03808316911614612dea57600080fd5b612df261366d565b506001600160a01b03881660009081526020818152604080832081518083018352815481526001918201546001600160e01b031960e091821b16828601908152338752948690529290942001549151891891901b1916601f60e01b1615612e5857600080fd5b336000908152602081815260409091206001015490820151601f60e01b60e09290921b19161615612e8857600080fd5b6001600160a01b0389166000818152602081905260408082208b8155600101805463ffffffff1916600160e01b8c1760e01c1790555133917f546816e99403df442acb68ef69562682a50762c20a3fb6b472f7af9923736cfc91a3600194505050600090505b6006548110156118455760068181548110612f0557fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d91339185908110612f3857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015612fa157600080fd5b505af1158015612fb5573d6000803e3d6000fd5b505050506040513d6020811015612fcb57600080fd5b5051612fd657600080fd5b600101612eee565b6006818154811061114857fe5b3360009081526020819052604081206001015460e01b600160e01b9081161461301357600080fd5b6d36b4b73a2932b83aba30ba34b7b760911b60005b600554811015613118576005818154811061303f57fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab29133918590811061307257fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156130db57600080fd5b505af11580156130ef573d6000803e3d6000fd5b505050506040513d602081101561310557600080fd5b505161311057600080fd5b600101613028565b60015484906001600160a01b0380831691161461313457600080fd5b6040805188815290516001600160a01b0388169133917f837f2931e3df0592458212be4e470025f197feb7a8e39deb5b7f1f1d42e6f2629181900360200190a3600354604080516340c10f1960e01b81526001600160a01b038981166004830152602482018b9052915191909216916340c10f199160448083019260209291908290030181600087803b1580156131ca57600080fd5b505af11580156131de573d6000803e3d6000fd5b505050506040513d60208110156131f457600080fd5b5051935050600090505b600654811015611b1c576006818154811061321557fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d9133918590811061324857fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156132b157600080fd5b505af11580156132c5573d6000803e3d6000fd5b505050506040513d60208110156132db57600080fd5b50516132e657600080fd5b6001016131fe565b60015460009082906001600160a01b0380831691161461330d57600080fd5b6001600160a01b03841660009081526007602052604090205460ff168061334c57506001600160a01b03841660009081526008602052604090205460ff165b949350505050565b3360009081526020819052604081206001015460e01b600160e01b9081161461337c57600080fd5b7f65787465726e616c546f6b656e5472616e7366657246726f6d0000000000000060005b60055481101561349057600581815481106133b757fe5b6000918252602090912060029091020154600580546001600160a01b039092169163c1786ab2913391859081106133ea57fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b15801561345357600080fd5b505af1158015613467573d6000803e3d6000fd5b505050506040513d602081101561347d57600080fd5b505161348857600080fd5b6001016133a0565b60015484906001600160a01b038083169116146134ac57600080fd5b60015460408051635bab6ad160e11b81526001600160a01b038c811660048301528b811660248301528a81166044830152606482018a90529151919092169163b756d5a29160848083019260209291908290030181600087803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b505050506040513d602081101561353c57600080fd5b5051935050600090505b600654811015613636576006818154811061355d57fe5b6000918252602090912060029091020154600680546001600160a01b0390921691638043154d9133918590811061359057fe5b906000526020600020906002020160010154856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156135f957600080fd5b505af115801561360d573d6000803e3d6000fd5b505050506040513d602081101561362357600080fd5b505161362e57600080fd5b600101613546565b505095945050505050565b6001600160a01b03811660009081526020819052604090206001015460e01b600160e01b161515919050565b604080518082019091526000808252602082015290565b8154818355818111156136b0576002028160020283600052602060002091820191016136b091906136b5565b505050565b6136e491905b808211156136e05780546001600160a01b0319168155600060018201556002016136bb565b5090565b9056fea265627a7a7231582074a1ce80db362ff5a7253926eb534cb9b3a6fb7a887930d7d6e293e23269601464736f6c63430005100032",
  "sourceMap": "198:500:42:-;;;242:57;8:9:-1;5:2;;;30:1;27;20:12;5:2;242:57:42;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;242:57:42;3122:6:52;:16;;-1:-1:-1;;;;;;3122:16:52;-1:-1:-1;;;;;3122:16:52;;;;;;;;;;;3162:20;;;-1:-1:-1;;;3162:20:52;;;;242:57:42;;3162:6:52;;;;:18;;:20;;;;;242:57:42;;3162:20:52;;;;;;;;:6;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;3162:20:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3162:20:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3162:20:52;3148:11;:34;;-1:-1:-1;;;;;;3148:34:52;-1:-1:-1;;;;;3148:34:52;;;;;;-1:-1:-1;3211:6:52;:25;;;-1:-1:-1;;;3211:25:52;;;;:6;;;;;:23;;:25;;;;;3162:20;;3211:25;;;;;;;:6;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;3211:25:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3211:25:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3211:25:52;3192:16;:44;;-1:-1:-1;;;;;;3192:44:52;-1:-1:-1;;;;;3192:44:52;;;;;;;;;-1:-1:-1;;3268:65:52;;;;;;;;-1:-1:-1;3268:65:52;;;-1:-1:-1;;;3211:25:52;3268:65;;;;;;3254:10;3246:19;;;;;;;;:87;;;;;;-1:-1:-1;3246:87:52;;;;;;-1:-1:-1;;3246:87:52;3313:18;3246:87;;;;;;;;;;198:500:42;;;;;;;;",
  "deployedSourceMap": "198:500:42:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;198:500:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3459:8:52;;;8236:638;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8236:638:52;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2027:78;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2027:78:52;-1:-1:-1;;;;;2027:78:52;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;19310:188;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19310:188:52;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1598:28;;;:::i;:::-;;;;-1:-1:-1;;;;;1598:28:52;;;;;;;;;;;;;;14008:918;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14008:918:52;;;;;;;;;;:::i;1723:46::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1723:46:52;;:::i;:::-;;;;-1:-1:-1;;;;;1723:46:52;;;;;;;;;;;;;;;;;;;;;11373:2405;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11373:2405:52;;;;;;;;;;:::i;18008:347::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;18008:347:52;;;;;;;;;;;;;;;;;;;;;;:::i;1406:20::-;;;:::i;15868:274::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15868:274:52;;;-1:-1:-1;;;;;15868:274:52;;;;;;;;;;;;:::i;6371:328::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6371:328:52;;;-1:-1:-1;;;;;6371:328:52;;;;;;;;;;;;:::i;8986:298::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8986:298:52;-1:-1:-1;;;;;8986:298:52;;:::i;5858:324::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5858:324:52;;;-1:-1:-1;;;;;5858:324:52;;;;;;;;;;;;:::i;2220:79::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2220:79:52;-1:-1:-1;;;;;2220:79:52;;:::i;20411:229::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20411:229:52;-1:-1:-1;;;;;20411:229:52;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1465:34;;;:::i;18984:149::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18984:149:52;-1:-1:-1;;;;;18984:149:52;;:::i;19504:189::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19504:189:52;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;19504:189:52;;;;;;;;;;;;;;549:147:42;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;549:147:42;;;;;;;;;;:::i;16426:329:52:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;16426:329:52;;;;;;;;;;;;;;;;;;;;;;:::i;18612:225::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18612:225:52;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;18612:225:52;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18612:225:52;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;18612:225:52;;-1:-1:-1;18612:225:52;-1:-1:-1;18612:225:52;-1:-1:-1;;;;;18612:225:52;;:::i;305:238:42:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;305:238:42;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;305:238:42;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;305:238:42;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;305:238:42;;-1:-1:-1;305:238:42;-1:-1:-1;;;;;;305:238:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;305:238:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1360:39:52;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1360:39:52;-1:-1:-1;;;;;1360:39:52;;:::i;:::-;;;;;;;-1:-1:-1;;;;;;1360:39:52;;;;;;;;;;;;;;;;19699:509;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19699:509:52;;;;;;;;;;:::i;1432:27::-;;;:::i;9533:1601::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9533:1601:52;;;;;;;;;;;;;;;;;:::i;6976:1111::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;6976:1111:52;;;;;;;;;;-1:-1:-1;;;;;;6976:1111:52;;;;;;;;;;;:::i;1867:47::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1867:47:52;;:::i;5303:318::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5303:318:52;;;-1:-1:-1;;;;;5303:318:52;;;;;;;;;;;;:::i;20646:340::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20646:340:52;;;;;;;;;;:::i;17245:384::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;17245:384:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8236:638::-;3703:10;8424:4;3695:19;;;;;;;;;;:31;;;3749:18;3695:31;-1:-1:-1;;;3695:50:52;;;:72;3687:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;8403:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;8488:28;8508:7;8488:19;:28::i;:::-;8484:80;;8548:5;8541:12;;;;8484:80;8702:10;8738:1;8694:19;;;;;;;;;;;:31;;;;;-1:-1:-1;;;;;8663:16:52;;;;;;;;:28;;;;8731:9;8694:31;;;8693:32;8663:28;;:63;-1:-1:-1;;;8643:84:52;:97;8635:106;;;;;;8776:37;;-1:-1:-1;;;;;8776:37:52;;;8793:10;;8776:37;;;;;-1:-1:-1;;;;;8830:16:52;;:7;:16;;;;;;;;;;8823:23;;;;;;;;;-1:-1:-1;;8823:23:52;;;;-1:-1:-1;5066:1:52;4708;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;;3778:1;;8236:638;;;;:::o;2027:78::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19310:188::-;5048:6;;19434:7;;19404;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;-1:-1:-1;;;;;19464:16:52;;:7;:16;;;;;;;;;;:27;;-1:-1:-1;5066:1:52;19310:188;;;;;:::o;1598:28::-;;;-1:-1:-1;;;;;1598:28:52;;:::o;14008:918::-;4003:10;14160:4;3995:19;;;;;;;;;;:31;;;4049:18;3995:31;-1:-1:-1;;;3995:50:52;;;:72;3987:81;;;;;;5048:6;;14138:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;14188:13;;-1:-1:-1;;;;;14188:13:52;:27;14180:36;;;;;;-1:-1:-1;;;;;14289:28:52;;14281:37;;;;;;14328:13;:30;;-1:-1:-1;;;;;;14328:30:52;-1:-1:-1;;;;;14328:30:52;;;;;;;;-1:-1:-1;14368:6:52;:40;;;-1:-1:-1;;;14368:40:52;;;;;;;;;;;:6;;;:24;;:40;;;;;-1:-1:-1;;14368:40:52;;;;;;;-1:-1:-1;14368:6:52;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;14368:40:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14368:40:52;;;;14444:14;-1:-1:-1;;;;;14426:32:52;:6;;;;;;;;;-1:-1:-1;;;;;14426:6:52;-1:-1:-1;;;;;14426:12:52;;:14;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14426:14:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14426:14:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14426:14:52;-1:-1:-1;;;;;14426:32:52;;14418:41;;;;;;14473:11;;:19;;;-1:-1:-1;;;14473:19:52;;;;14504:4;;-1:-1:-1;;;;;14473:11:52;;:17;;:19;;;;;;;;;;;;;;:11;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;14473:19:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14473:19:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14473:19:52;-1:-1:-1;;;;;14473:36:52;;14469:172;;;14525:11;;:45;;;-1:-1:-1;;;14525:45:52;;-1:-1:-1;;;;;14525:45:52;;;;;;;;;:11;;;;;:29;;:45;;;;;:11;;:45;;;;;;;:11;;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;14525:45:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14525:45:52;;;;14615:14;-1:-1:-1;;;;;14592:37:52;:11;;;;;;;;;-1:-1:-1;;;;;14592:11:52;-1:-1:-1;;;;;14592:17:52;;:19;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14592:19:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14592:19:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14592:19:52;-1:-1:-1;;;;;14592:37:52;;14584:46;;;;;;14654:16;;:24;;;-1:-1:-1;;;14654:24:52;;;;14690:4;;-1:-1:-1;;;;;14654:16:52;;:22;;:24;;;;;;;;;;;;;;:16;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;14654:24:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14654:24:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14654:24:52;-1:-1:-1;;;;;14654:41:52;;14650:187;;;14711:16;;:50;;;-1:-1:-1;;;14711:50:52;;-1:-1:-1;;;;;14711:50:52;;;;;;;;;:16;;;;;:34;;:50;;;;;:16;;:50;;;;;;;:16;;:50;;;5:2:-1;;;;30:1;27;20:12;5:2;14711:50:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14711:50:52;;;;14811:14;-1:-1:-1;;;;;14783:42:52;:16;;;;;;;;;-1:-1:-1;;;;;14783:16:52;-1:-1:-1;;;;;14783:22:52;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14783:24:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14783:24:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14783:24:52;-1:-1:-1;;;;;14783:42:52;;14775:51;;;;;;14884:13;;14851:47;;;-1:-1:-1;;;;;14884:13:52;;;;14851:47;;;14877:4;;14851:47;;;;;;;;;;-1:-1:-1;14915:4:52;;14008:918;-1:-1:-1;;;14008:918:52:o;1723:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1723:46:52;;;;-1:-1:-1;1723:46:52;:::o;11373:2405::-;3857:10;11534:4;3849:19;;;;;;;;;;:31;;;3903:18;3849:31;-1:-1:-1;;;3849:50:52;;;:72;3841:81;;;;;;5048:6;;11513:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;11554:56;;:::i;:::-;11620:40;;:::i;:::-;11670;11739:17;-1:-1:-1;;;;;11713:49:52;;:51;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11713:51:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11713:51:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11713:51:52;;-1:-1:-1;11774:11:52;;11809:4;:47;;;;;;;;;11808:120;;;-1:-1:-1;11881:46:52;11873:4;:54;;;;;;;;;11808:120;11804:852;;;-1:-1:-1;;;;;11971:47:52;;;;;;:28;:47;;;;;;;;;11944:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12032:614:52;;12158:1;12130:20;:27;;;;:29;12097:24;:30;;;:62;12093:389;;;12202:20;12223:27;;-1:-1:-1;;12223:29:52;;;12202:51;;;;;;;;;;;;;;;12183:70;;;;;;;;;12202:51;;;;;12183:70;;-1:-1:-1;;;;;12183:70:52;;;;;;;;;;12296:30;;;;12275:20;:52;;12183:70;;-1:-1:-1;12183:70:52;;12275:20;;12296:30;12275:52;;;;;;;;;;;;;;:71;;:52;;;;;;:71;;-1:-1:-1;;;;;;12275:71:52;-1:-1:-1;;;;;12275:71:52;;;;;;;;;;-1:-1:-1;12275:71:52;;;;12433:30;;;;12397:26;;12368:56;;;;;:28;:56;;;;;;:62;;;:95;12093:389;12499:20;:29;;;;;-1:-1:-1;;12499:29:52;;;:::i;:::-;-1:-1:-1;;;;;;;12553:47:52;;;;;;:28;:47;;;;;12546:54;;-1:-1:-1;;12546:54:52;;;;;;;;;;;12032:614;12678:40;12670:4;:48;;;;;;;;;12669:121;;;-1:-1:-1;12743:46:52;12735:4;:54;;;;;;;;;12669:121;12665:861;;;-1:-1:-1;;;;;12833:48:52;;;;;;:29;:48;;;;;;;;;12806:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12895:621:52;;13022:1;12993:21;:28;;;;:30;12960:24;:30;;;:63;12956:394;;;13066:21;13088:28;;-1:-1:-1;;13088:30:52;;;13066:53;;;;;;;;;;;;;;;13047:72;;;;;;;;;13066:53;;;;;13047:72;;-1:-1:-1;;;;;13047:72:52;;;;;;;;;;13163:30;;;;13141:21;:53;;13047:72;;-1:-1:-1;13047:72:52;;13141:21;;13163:30;13141:53;;;;;;;;;;;;;;:72;;:53;;;;;;:72;;-1:-1:-1;;;;;;13141:72:52;-1:-1:-1;;;;;13141:72:52;;;;;;;;;;-1:-1:-1;13141:72:52;;;;13301:30;;;;13265:26;;13235:57;;;;;:29;:57;;;;;;:63;;;:96;12956:394;13367:21;:30;;;;;-1:-1:-1;;13367:30:52;;;:::i;:::-;-1:-1:-1;;;;;;;13422:48:52;;;;;;:29;:48;;;;;13415:55;;-1:-1:-1;;13415:55:52;;;;;;;;;;;12895:621;13539:6;13535:214;;;13633:30;;;;-1:-1:-1;;;;;13566:172:52;;;;;13685:39;13677:4;:47;;;;;;;;13566:172;;;;;;13677:47;;13566:172;;;;;;;;;;;;;13535:214;13765:6;11373:2405;-1:-1:-1;;;;;;;11373:2405:52:o;18008:347::-;3554:10;18259:4;3546:19;;;;;;;;;;3607:10;3546:31;;3600:18;3546:31;-1:-1:-1;;;3546:50:52;;;:72;3538:81;;;;;;4385:580;4442:11;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;18237:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;18286:6;;:62;;;-1:-1:-1;;;18286:62:52;;-1:-1:-1;;;;;18286:62:52;;;;;;;;;;;;;;;;;;;;;;:6;;;;;:28;;:62;;;;;;;;;;;;;;:6;;:62;;;5:2:-1;;;;30:1;27;20:12;5:2;18286:62:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18286:62:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18286:62:52;;-1:-1:-1;4708:1:52;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;;3629:1;;18008:347;;;;;;:::o;1406:20::-;;;-1:-1:-1;;;;;1406:20:52;;:::o;15868:274::-;3554:10;16073:4;3546:19;;;;;;;;;;3607:10;3546:31;;3600:18;3546:31;-1:-1:-1;;;3546:50:52;;;:72;3538:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;16051:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;16100:6;;:35;;;-1:-1:-1;;;16100:35:52;;;;;;;;-1:-1:-1;;;;;16100:35:52;;;;;;;;;:6;;;;;:16;;:35;;;;;;;;;;;;;;:6;;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;16100:35:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16100:35:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16100:35:52;;-1:-1:-1;4708:1:52;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;;3629:1;;15868:274;;;;;:::o;6371:328::-;3554:10;6566:4;3546:19;;;;;;;;;;3607:10;3546:31;;3600:18;3546:31;-1:-1:-1;;;3546:50:52;;;:72;3538:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;6545:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;6591:45;;;;;;;;-1:-1:-1;;;;;6591:45:52;;;6602:10;;6591:45;;;;;;;;;6653:11;;:39;;;-1:-1:-1;;;6653:39:52;;-1:-1:-1;;;;;6653:39:52;;;;;;;;;;;;;;;:11;;;;;:16;;:39;;;;;;;;;;;;;;:11;;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;6653:39:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6653:39:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6653:39:52;;-1:-1:-1;4708:1:52;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;8986:298;5048:6;;9067:4;;9050:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;9087:31;9107:10;9087:19;:31::i;:::-;9083:83;;9150:5;9143:12;;;;9083:83;9190:10;9182:7;:19;;;;;;;;;;;9175:26;;;;;;;-1:-1:-1;;9175:26:52;;;9216:40;9190:10;;9216:40;;;9273:4;9266:11;;5066:1;8986:298;;;;:::o;5858:324::-;3554:10;6054:4;3546:19;;;;;;;;;;3607:10;3546:31;;3600:18;3546:31;-1:-1:-1;;;3546:50:52;;;:72;3538:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;6033:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;6079:42;;;;;;;;-1:-1:-1;;;;;6079:42:52;;;6094:10;;6079:42;;;;;;;;;6138:16;;:37;;;-1:-1:-1;;;6138:37:52;;-1:-1:-1;;;;;6138:37:52;;;;;;;;;;;;;;;:16;;;;;:21;;:37;;;;;;;;;;;;;;:16;;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;6138:37:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6138:37:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6138:37:52;;-1:-1:-1;4708:1:52;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;2220:79;;;;;;;;;;;;;;;;;;;;;;;;:::o;20411:229::-;5048:6;;20537:4;;;;20499:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;20575:20;:27;20604:21;:28;20575:27;;-1:-1:-1;20604:28:52;-1:-1:-1;20411:229:52;;;;:::o;1465:34::-;;;-1:-1:-1;;;;;1465:34:52;;:::o;18984:149::-;5048:6;;19075:7;;19053;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;-1:-1:-1;;19109:16:52;;-1:-1:-1;;;;;19109:16:52;;18984:149;-1:-1:-1;18984:149:52:o;19504:189::-;5048:6;;19629;;19599:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;-1:-1:-1;;;;;;;;19658:16:52;:7;:16;;;;;;;;;;:28;;;;;;19504:189::o;549:147:42:-;685:4;549:147;;;;;:::o;16426:329:52:-;3554:10;16664:4;3546:19;;;;;;;;;;3607:10;3546:31;;3600:18;3546:31;-1:-1:-1;;;3546:50:52;;;:72;3538:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;16642:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;16691:6;;:57;;;-1:-1:-1;;;16691:57:52;;-1:-1:-1;;;;;16691:57:52;;;;;;;;;;;;;;;;;;;;;;:6;;;;;:28;;:57;;;;;;;;;;;;;;:6;;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;16691:57:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16691:57:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16691:57:52;;-1:-1:-1;4708:1:52;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;18612:225;4296:10;18773:4;4288:19;;;;;;;;;;:31;;;4342:18;4288:31;-1:-1:-1;;;4288:50:52;;;:72;4280:81;;;;;;5048:6;;18747:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;18804:6;;:26;;-1:-1:-1;;;18804:26:52;;;;;;;;;;;;;;;-1:-1:-1;;;;;18804:6:52;;;;:15;;18820:9;;;;18804:26;;;;18820:9;;;;18804:26;1:33:-1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;18804::52;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18804:26:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18804:26:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18804:26:52;;18612:225;-1:-1:-1;;;;;18612:225:52:o;305:238:42:-;492:6;;:44;;-1:-1:-1;;;492:44:42;;-1:-1:-1;;;;;492:44:42;;;;;;;;;;;;;;;461:12;492:44;;;;;;;;;;;;455:4;;461:12;;492:6;;;;;:18;;511:9;;522:5;;;;529:6;;492:44;;;;522:5;;;;492:44;1:33:-1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;492:44:42;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;492:44:42;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;492:44:42;;;;;;39:16:-1;36:1;17:17;2:54;101:4;492:44:42;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;;;5:11;;2:2;;;29:1;26;19:12;2:2;492:44:42;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;492:44:42;;420:4:-1;411:14;;;;492:44:42;;;;;411:14:-1;492:44:42;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;492:44:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;485:51;;;;305:238;;;;;;;;:::o;1360:39:52:-;;;;;;;;;;;;;;;;;;;;;;:::o;19699:509::-;19796:7;19816:40;;:::i;:::-;-1:-1:-1;;;;;;19859:47:52;;;;;;:28;:47;;;;;;;;;19816:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19917:102;;19965:20;19986:8;:14;;;19965:36;;;;;;;;;;;;;;;;;;:43;;;19958:50;;;;;19917:102;-1:-1:-1;;;;;;20040:48:52;;;;;;:29;:48;;;;;;;;;20029:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20099:103;;20147:21;20169:8;:14;;;20147:37;;;;;;;1432:27;;;-1:-1:-1;;;;;1432:27:52;;:::o;9533:1601::-;3857:10;9707:4;3849:19;;;;;;;;;;:31;;;3903:18;3849:31;-1:-1:-1;;;3849:50:52;;;:72;3841:81;;;;;;5048:6;;9686:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;9727:40;9796:17;-1:-1:-1;;;;;9770:49:52;;:51;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9770:51:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9770:51:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9770:51:52;;-1:-1:-1;9844:39:52;9836:4;:47;;;;;;;;;9835:120;;;-1:-1:-1;9908:46:52;9900:4;:54;;;;;;;;;9835:120;9831:596;;;-1:-1:-1;;;;;9976:47:52;;;;;;:28;:47;;;;;:60;;;9971:446;;10082:44;;;;;;;;-1:-1:-1;;;;;10082:44:52;;;;;;;;;;;;;10056:20;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;10056:71:52;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10056:71:52;;;;;;;;;;;;;;;;;;;10211:61;;;;;;;;;;10242:27;;-1:-1:-1;;10242:29:52;10211:61;;;;;;10145:47;;;:28;:47;;;;;;;:127;;;;-1:-1:-1;;10145:127:52;;;;;;;;;;;;9971:446;;;-1:-1:-1;;;;;10331:47:52;;;;;;:28;:47;;;;;:53;;;10310:20;:75;;10395:7;;10331:53;10310:75;;;;;;;;;;;;;;;;:82;;:92;;;;9971:446;10449:40;10441:4;:48;;;;;;;;;10440:121;;;-1:-1:-1;10514:46:52;10506:4;:54;;;;;;;;;10440:121;10436:603;;;-1:-1:-1;;;;;10582:48:52;;;;;;:29;:48;;;;;:61;;;10577:452;;10690:44;;;;;;;;-1:-1:-1;;;;;10690:44:52;;;;;;;;;;;;;10663:21;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;10663:72:52;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10663:72:52;;;;;;;;;;;;;;;;;;;10820:62;;;;;;;;;;10851:28;;-1:-1:-1;;10851:30:52;10820:62;;;;;;10753:48;;;:29;:48;;;;;;;:129;;;;-1:-1:-1;;10753:129:52;;;;;;;;;;;;10577:452;;;-1:-1:-1;;;;;10942:48:52;;;;;;:29;:48;;;;;:54;;;10920:21;:77;;11007:7;;10942:54;10920:77;;;;;;;;;;;;;;;;:84;;:94;;;;10577:452;11073:17;-1:-1:-1;;;;;11053:53:52;;11092:7;11101:4;11053:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11123:4:52;;9533:1601;-1:-1:-1;;;;;9533:1601:52:o;6976:1111::-;3703:10;7201:4;3695:19;;;;;;;;;;:31;;;3749:18;3695:31;-1:-1:-1;;;3695:50:52;;;:72;3687:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;7180:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;7222:20;;:::i;:::-;-1:-1:-1;;;;;;7245:16:52;;:7;:16;;;;;;;;;;;7222:39;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7222:39:52;;;;;;;;;;;7623:10;7615:19;;;;;;;;;;:31;;7593:18;;7580:31;;7615;;;7614:32;7560:87;-1:-1:-1;;;7560:87:52;:100;7552:109;;;;;;7813:10;7849:1;7805:19;;;;;;;;;;;:31;;;7784:18;;;;-1:-1:-1;;;7842:9:52;7805:31;;;;7804:32;7784:53;7764:74;:87;7756:96;;;;;;-1:-1:-1;;;;;7896:16:52;;:7;:16;;;;;;;;;;;:41;;;7998:10;7947:28;:62;;-1:-1:-1;;7947:62:52;-1:-1:-1;;;7978:31:52;;7991:18;7947:62;;;;8024:35;8039:10;;8024:35;;;8076:4;8069:11;;;4708:1;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;1867:47;;;;;;;;;;5303:318;3554:10;5497:4;3546:19;;;;;;;;;;3607:10;3546:31;;3600:18;3546:31;-1:-1:-1;;;3546:50:52;;;:72;3538:81;;;;;;-1:-1:-1;;;4442:11:52;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;5476:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;5522:40;;;;;;;;-1:-1:-1;;;;;5522:40:52;;;5537:10;;5522:40;;;;;;;;;5579:16;;:35;;;-1:-1:-1;;;5579:35:52;;-1:-1:-1;;;;;5579:35:52;;;;;;;;;;;;;;;:16;;;;;:21;;:35;;;;;;;;;;;;;;:16;;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;5579:35:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5579:35:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5579:35:52;;-1:-1:-1;4708:1:52;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;20646:340;5048:6;;20805:4;;20767:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;-1:-1:-1;;;;;20837:47:52;;;;;;:28;:47;;;;;:60;;;;:141;;-1:-1:-1;;;;;;20917:48:52;;;;;;:29;:48;;;;;:61;;;20837:141;20829:150;20646:340;-1:-1:-1;;;;20646:340:52:o;17245:384::-;3554:10;17527:4;3546:19;;;;;;;;;;3607:10;3546:31;;3600:18;3546:31;-1:-1:-1;;;3546:50:52;;;:72;3538:81;;;;;;4385:580;4442:11;4463:236;4483:20;:27;4477:33;;4463:236;;;4581:20;4602:3;4581:25;;;;;;;;;;;;;;;;;;;;;:35;4648:20;:25;;-1:-1:-1;;;;;4581:35:52;;;;4554:81;;4636:10;;4669:3;;4648:25;;;;;;;;;;;;;;;;:32;;;4682:4;4554:133;;;;;;;;;;;;;-1:-1:-1;;;;;4554:133:52;-1:-1:-1;;;;;4554:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4554:133:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4554:133:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4554:133:52;4533:155;;;;;;4512:5;;4463:236;;;5048:6;;17505:7;;-1:-1:-1;;;;;5029:26:52;;;5048:6;;5029:26;5021:35;;;;;;17554:6;;:68;;;-1:-1:-1;;;17554:68:52;;-1:-1:-1;;;;;17554:68:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;;;;;:32;;:68;;;;;;;;;;;;;;:6;;:68;;;5:2:-1;;;;30:1;27;20:12;5:2;17554:68:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17554:68:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17554:68:52;;-1:-1:-1;4708:1:52;4730;4724:7;;4719:240;4739:21;:28;4733:34;;4719:240;;;4838:21;4860:3;4838:26;;;;;;;;;;;;;;;;;;;;;:36;4907:21;:26;;-1:-1:-1;;;;;4838:36:52;;;;4811:83;;4895:10;;4929:3;;4907:26;;;;;;;;;;;;;;;;:33;;;4942:4;4811:136;;;;;;;;;;;;;-1:-1:-1;;;;;4811:136:52;-1:-1:-1;;;;;4811:136:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4811:136:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4811:136:52;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4811:136:52;4790:158;;;;;;4769:5;;4719:240;;;3629:1;;17245:384;;;;;;;:::o;20992:159::-;-1:-1:-1;;;;;21083:16:52;;21059:4;21083:16;;;;;;;;;;21119:10;21083:28;;21134:9;21083:28;-1:-1:-1;;;21083:47:52;:60;;20992:159;;;:::o;198:500:42:-;;;;;;;;;;-1:-1:-1;198:500:42;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;198:500:42;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity >0.5.4;\n\nimport \"@daostack/arc/contracts/controller/Controller.sol\";\n\n/**\n * @title A Controller mock. Ignores the scheme registration.\n * Those tests can be found on e2e tests.\n */\ncontract ControllerMock is Controller {\n    constructor(Avatar _avatar) public Controller(_avatar) {}\n\n    function genericCall(\n        address _contract,\n        bytes calldata _data,\n        Avatar _avatar,\n        uint256 _value\n    ) external returns (bool, bytes memory) {\n        return avatar.genericCall(_contract, _data, _value);\n    }\n\n    function isSchemeRegistered(address _scheme, address _avatar)\n        external\n        view\n        returns (bool)\n    {\n        return true;\n    }\n}\n",
  "sourcePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/mocks/ControllerMock.sol",
  "ast": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/mocks/ControllerMock.sol",
    "exportedSymbols": {
      "ControllerMock": [
        11670
      ]
    },
    "id": 11671,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11622,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:42"
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Controller.sol",
        "file": "@daostack/arc/contracts/controller/Controller.sol",
        "id": 11623,
        "nodeType": "ImportDirective",
        "scope": 11671,
        "sourceUnit": 14162,
        "src": "25:59:42",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11624,
              "name": "Controller",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14161,
              "src": "225:10:42",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Controller_$14161",
                "typeString": "contract Controller"
              }
            },
            "id": 11625,
            "nodeType": "InheritanceSpecifier",
            "src": "225:10:42"
          }
        ],
        "contractDependencies": [
          14161,
          14394
        ],
        "contractKind": "contract",
        "documentation": "@title A Controller mock. Ignores the scheme registration.\nThose tests can be found on e2e tests.",
        "fullyImplemented": true,
        "id": 11670,
        "linearizedBaseContracts": [
          11670,
          14161,
          14394
        ],
        "name": "ControllerMock",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 11633,
              "nodeType": "Block",
              "src": "297:2:42",
              "statements": []
            },
            "documentation": null,
            "id": 11634,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11630,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11627,
                    "src": "288:7:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 11631,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11629,
                  "name": "Controller",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 14161,
                  "src": "277:10:42",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Controller_$14161_$",
                    "typeString": "type(contract Controller)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "277:19:42"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11628,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11627,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 11634,
                  "src": "254:14:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11626,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "254:6:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "253:16:42"
            },
            "returnParameters": {
              "id": 11632,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "297:0:42"
            },
            "scope": 11670,
            "src": "242:57:42",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11656,
              "nodeType": "Block",
              "src": "475:68:42",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11651,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11636,
                        "src": "511:9:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11652,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11638,
                        "src": "522:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11653,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11642,
                        "src": "529:6:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 11649,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "492:6:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 11650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "genericCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12563,
                      "src": "492:18:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (address,bytes memory,uint256) external returns (bool,bytes memory)"
                      }
                    },
                    "id": 11654,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "492:44:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "functionReturnParameters": 11648,
                  "id": 11655,
                  "nodeType": "Return",
                  "src": "485:51:42"
                }
              ]
            },
            "documentation": null,
            "id": 11657,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "genericCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11643,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11636,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 11657,
                  "src": "335:17:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11635,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "335:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11638,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 11657,
                  "src": "362:20:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 11637,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "362:5:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11640,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 11657,
                  "src": "392:14:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11639,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "392:6:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11642,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 11657,
                  "src": "416:14:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11641,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "416:7:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "325:111:42"
            },
            "returnParameters": {
              "id": 11648,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11645,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11657,
                  "src": "455:4:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11644,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "455:4:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11647,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11657,
                  "src": "461:12:42",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 11646,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "461:5:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "454:20:42"
            },
            "scope": 11670,
            "src": "305:238:42",
            "stateMutability": "nonpayable",
            "superFunction": 13839,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11668,
              "nodeType": "Block",
              "src": "668:28:42",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 11666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "685:4:42",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 11665,
                  "id": 11667,
                  "nodeType": "Return",
                  "src": "678:11:42"
                }
              ]
            },
            "documentation": null,
            "id": 11669,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isSchemeRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11662,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11659,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 11669,
                  "src": "577:15:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11658,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "577:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11661,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 11669,
                  "src": "594:15:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11660,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "594:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "576:34:42"
            },
            "returnParameters": {
              "id": 11665,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11664,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11669,
                  "src": "658:4:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11663,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "658:4:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "657:6:42"
            },
            "scope": 11670,
            "src": "549:147:42",
            "stateMutability": "view",
            "superFunction": 14017,
            "visibility": "external"
          }
        ],
        "scope": 11671,
        "src": "198:500:42"
      }
    ],
    "src": "0:699:42"
  },
  "legacyAST": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/mocks/ControllerMock.sol",
    "exportedSymbols": {
      "ControllerMock": [
        11670
      ]
    },
    "id": 11671,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11622,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:42"
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Controller.sol",
        "file": "@daostack/arc/contracts/controller/Controller.sol",
        "id": 11623,
        "nodeType": "ImportDirective",
        "scope": 11671,
        "sourceUnit": 14162,
        "src": "25:59:42",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11624,
              "name": "Controller",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14161,
              "src": "225:10:42",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Controller_$14161",
                "typeString": "contract Controller"
              }
            },
            "id": 11625,
            "nodeType": "InheritanceSpecifier",
            "src": "225:10:42"
          }
        ],
        "contractDependencies": [
          14161,
          14394
        ],
        "contractKind": "contract",
        "documentation": "@title A Controller mock. Ignores the scheme registration.\nThose tests can be found on e2e tests.",
        "fullyImplemented": true,
        "id": 11670,
        "linearizedBaseContracts": [
          11670,
          14161,
          14394
        ],
        "name": "ControllerMock",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 11633,
              "nodeType": "Block",
              "src": "297:2:42",
              "statements": []
            },
            "documentation": null,
            "id": 11634,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11630,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11627,
                    "src": "288:7:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 11631,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11629,
                  "name": "Controller",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 14161,
                  "src": "277:10:42",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Controller_$14161_$",
                    "typeString": "type(contract Controller)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "277:19:42"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11628,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11627,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 11634,
                  "src": "254:14:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11626,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "254:6:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "253:16:42"
            },
            "returnParameters": {
              "id": 11632,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "297:0:42"
            },
            "scope": 11670,
            "src": "242:57:42",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11656,
              "nodeType": "Block",
              "src": "475:68:42",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11651,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11636,
                        "src": "511:9:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11652,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11638,
                        "src": "522:5:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11653,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11642,
                        "src": "529:6:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 11649,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12733,
                        "src": "492:6:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      "id": 11650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "genericCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12563,
                      "src": "492:18:42",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (address,bytes memory,uint256) external returns (bool,bytes memory)"
                      }
                    },
                    "id": 11654,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "492:44:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "functionReturnParameters": 11648,
                  "id": 11655,
                  "nodeType": "Return",
                  "src": "485:51:42"
                }
              ]
            },
            "documentation": null,
            "id": 11657,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "genericCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11643,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11636,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 11657,
                  "src": "335:17:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11635,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "335:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11638,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 11657,
                  "src": "362:20:42",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 11637,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "362:5:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11640,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 11657,
                  "src": "392:14:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11639,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "392:6:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11642,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 11657,
                  "src": "416:14:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11641,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "416:7:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "325:111:42"
            },
            "returnParameters": {
              "id": 11648,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11645,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11657,
                  "src": "455:4:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11644,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "455:4:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11647,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11657,
                  "src": "461:12:42",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 11646,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "461:5:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "454:20:42"
            },
            "scope": 11670,
            "src": "305:238:42",
            "stateMutability": "nonpayable",
            "superFunction": 13839,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11668,
              "nodeType": "Block",
              "src": "668:28:42",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 11666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "685:4:42",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 11665,
                  "id": 11667,
                  "nodeType": "Return",
                  "src": "678:11:42"
                }
              ]
            },
            "documentation": null,
            "id": 11669,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isSchemeRegistered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11662,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11659,
                  "name": "_scheme",
                  "nodeType": "VariableDeclaration",
                  "scope": 11669,
                  "src": "577:15:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11658,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "577:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11661,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 11669,
                  "src": "594:15:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11660,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "594:7:42",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "576:34:42"
            },
            "returnParameters": {
              "id": 11665,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11664,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11669,
                  "src": "658:4:42",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11663,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "658:4:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "657:6:42"
            },
            "scope": 11670,
            "src": "549:147:42",
            "stateMutability": "view",
            "superFunction": 14017,
            "visibility": "external"
          }
        ],
        "scope": 11671,
        "src": "198:500:42"
      }
    ],
    "src": "0:699:42"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.2",
  "updatedAt": "2021-08-23T07:33:52.365Z",
  "devdoc": {
    "methods": {
      "addGlobalConstraint(address,bytes32,address)": {
        "details": "add or update Global Constraint",
        "params": {
          "_globalConstraint": "the address of the global constraint to be added.",
          "_params": "the constraint parameters hash."
        },
        "return": "bool which represents a success"
      },
      "burnReputation(uint256,address,address)": {
        "details": "Burns `_amount` of reputation from `_from`",
        "params": {
          "_amount": "amount of reputation to burn",
          "_from": "The address that will lose the reputation"
        },
        "return": "bool which represents a success"
      },
      "externalTokenApproval(address,address,uint256,address)": {
        "details": "externalTokenApproval approve the spender address to spend a specified amount of tokens     on behalf of msg.sender.",
        "params": {
          "_externalToken": "the address of the Token Contract",
          "_spender": "address",
          "_value": "the amount of ether (in Wei) which the approval is referring to."
        },
        "return": "bool which represents a success"
      },
      "externalTokenTransfer(address,address,uint256,address)": {
        "details": "send some amount of arbitrary ERC20 Tokens",
        "params": {
          "_externalToken": "the address of the Token Contract",
          "_to": "address of the beneficiary",
          "_value": "the amount of ether (in Wei) to send"
        },
        "return": "bool which represents a success"
      },
      "externalTokenTransferFrom(address,address,address,uint256,address)": {
        "details": "transfer token \"from\" address \"to\" address     One must to approve the amount of tokens which can be spend from the     \"from\" account.This can be done using externalTokenApprove.",
        "params": {
          "_externalToken": "the address of the Token Contract",
          "_from": "address of the account to send from",
          "_to": "address of the beneficiary",
          "_value": "the amount of ether (in Wei) to send"
        },
        "return": "bool which represents a success"
      },
      "getNativeReputation(address)": {
        "details": "getNativeReputation",
        "params": {
          "_avatar": "the organization avatar."
        },
        "return": "organization native reputation"
      },
      "globalConstraintsCount(address)": {
        "details": "globalConstraintsCount return the global constraint pre and post count",
        "return": "uint256 globalConstraintsPre count.uint256 globalConstraintsPost count."
      },
      "metaData(string,address)": {
        "details": "metaData emits an event with a string, should contain the hash of some meta data.",
        "params": {
          "_avatar": "Avatar",
          "_metaData": "a string representing a hash of the meta data"
        },
        "return": "bool which represents a success"
      },
      "mintReputation(uint256,address,address)": {
        "details": "Mint `_amount` of reputation that are assigned to `_to` .",
        "params": {
          "_amount": "amount of reputation to mint",
          "_to": "beneficiary address"
        },
        "return": "bool which represents a success"
      },
      "mintTokens(uint256,address,address)": {
        "details": "mint tokens .",
        "params": {
          "_amount": "amount of token to mint",
          "_beneficiary": "beneficiary address"
        },
        "return": "bool which represents a success"
      },
      "registerScheme(address,bytes32,bytes4,address)": {
        "details": "register a scheme",
        "params": {
          "_paramsHash": "a hashed configuration of the usage of the scheme",
          "_permissions": "the permissions the new scheme will have",
          "_scheme": "the address of the scheme"
        },
        "return": "bool which represents a success"
      },
      "removeGlobalConstraint(address,address)": {
        "details": "remove Global Constraint",
        "params": {
          "_globalConstraint": "the address of the global constraint to be remove."
        },
        "return": "bool which represents a success"
      },
      "sendEther(uint256,address,address)": {
        "details": "send some ether",
        "params": {
          "_amountInWei": "the amount of ether (in Wei) to send",
          "_to": "address of the beneficiary"
        },
        "return": "bool which represents a success"
      },
      "unregisterScheme(address,address)": {
        "details": "unregister a scheme",
        "params": {
          "_scheme": "the address of the scheme"
        },
        "return": "bool which represents a success"
      },
      "unregisterSelf(address)": {
        "details": "unregister the caller's scheme",
        "return": "bool which represents a success"
      },
      "upgradeController(address,address)": {
        "details": "upgrade the Controller     The function will trigger an event 'UpgradeController'.",
        "params": {
          "_newController": "the address of the new controller."
        },
        "return": "bool which represents a success"
      }
    },
    "title": "A Controller mock. Ignores the scheme registration. Those tests can be found on e2e tests."
  },
  "userdoc": {
    "methods": {}
  }
}