{
  "contractName": "PlasmaFramework",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "isChildChainActivated",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_outputId",
          "type": "bytes32"
        }
      ],
      "name": "flagOutputFinalized",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "vaultId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getNextExit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "_outputIds",
          "type": "bytes32[]"
        }
      ],
      "name": "isAnyOutputFinalized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "exitsQueues",
      "outputs": [
        {
          "internalType": "contract PriorityQueue",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "childBlockInterval",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "vaultId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "addExitQueue",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nextChildBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "deactivateNonReentrant",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_contract",
          "type": "address"
        }
      ],
      "name": "isExitGameSafeToUse",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_vaultId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_vaultAddress",
          "type": "address"
        }
      ],
      "name": "registerVault",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "vaultId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "exitableAt",
          "type": "uint64"
        },
        {
          "components": [
            {
              "internalType": "uint64",
              "name": "blockNum",
              "type": "uint64"
            },
            {
              "internalType": "uint16",
              "name": "txIndex",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "outputIndex",
              "type": "uint16"
            }
          ],
          "internalType": "struct PosLib.Position",
          "name": "txPos",
          "type": "tuple"
        },
        {
          "internalType": "uint160",
          "name": "exitId",
          "type": "uint160"
        },
        {
          "internalType": "contract IExitProcessor",
          "name": "exitProcessor",
          "type": "address"
        }
      ],
      "name": "enqueue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nextDepositBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_txType",
          "type": "uint256"
        }
      ],
      "name": "protocols",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_vaultId",
          "type": "uint256"
        }
      ],
      "name": "vaults",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "isOutputFinalized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "activateChildChain",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_exitGame",
          "type": "address"
        }
      ],
      "name": "exitGameToTxType",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CHILD_BLOCK_INTERVAL",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nextDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_txType",
          "type": "uint256"
        }
      ],
      "name": "exitGames",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_blockRoot",
          "type": "bytes32"
        }
      ],
      "name": "submitBlock",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_blockRoot",
          "type": "bytes32"
        }
      ],
      "name": "submitDepositBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "authority",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "vaultId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "hasExitQueue",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "delegations",
      "outputs": [
        {
          "internalType": "contract IExitProcessor",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "minExitPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "vaultId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint160",
          "name": "topExitId",
          "type": "uint160"
        },
        {
          "internalType": "uint256",
          "name": "maxExitsToProcess",
          "type": "uint256"
        }
      ],
      "name": "processExits",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "_outputIds",
          "type": "bytes32[]"
        }
      ],
      "name": "batchFlagOutputsFinalized",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_vaultAddress",
          "type": "address"
        }
      ],
      "name": "vaultToId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "blockNum",
          "type": "uint256"
        }
      ],
      "name": "isDeposit",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "blocks",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_txType",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_contract",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "_protocol",
          "type": "uint8"
        }
      ],
      "name": "registerExitGame",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "activateNonReentrant",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minExitPeriod",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_initialImmuneVaults",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_initialImmuneExitGames",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_authority",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_maintainer",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "blknum",
          "type": "uint256"
        }
      ],
      "name": "BlockSubmitted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "authority",
          "type": "address"
        }
      ],
      "name": "ChildChainActivated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "vaultId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "ExitQueueAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "processedNum",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "vaultId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "ProcessedExitsNum",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint160",
          "name": "exitId",
          "type": "uint160"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "priority",
          "type": "uint256"
        }
      ],
      "name": "ExitQueued",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txType",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "exitGameAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "protocol",
          "type": "uint8"
        }
      ],
      "name": "ExitGameRegistered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "vaultId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "vaultAddress",
          "type": "address"
        }
      ],
      "name": "VaultRegistered",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getMaintainer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getVersion",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "string",
          "name": "_version",
          "type": "string"
        }
      ],
      "name": "setVersion",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.11+commit.c082d0b4\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isChildChainActivated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_outputId\",\"type\":\"bytes32\"}],\"name\":\"flagOutputFinalized\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getNextExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_outputIds\",\"type\":\"bytes32[]\"}],\"name\":\"isAnyOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"exitsQueues\",\"outputs\":[{\"internalType\":\"contract PriorityQueue\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"childBlockInterval\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"addExitQueue\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getMaintainer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nextChildBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deactivateNonReentrant\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"}],\"name\":\"isExitGameSafeToUse\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_vaultId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_vaultAddress\",\"type\":\"address\"}],\"name\":\"registerVault\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"_version\",\"type\":\"string\"}],\"name\":\"setVersion\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"exitableAt\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"blockNum\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"txIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"outputIndex\",\"type\":\"uint16\"}],\"internalType\":\"struct PosLib.Position\",\"name\":\"txPos\",\"type\":\"tuple\"},{\"internalType\":\"uint160\",\"name\":\"exitId\",\"type\":\"uint160\"},{\"internalType\":\"contract IExitProcessor\",\"name\":\"exitProcessor\",\"type\":\"address\"}],\"name\":\"enqueue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nextDepositBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_txType\",\"type\":\"uint256\"}],\"name\":\"protocols\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_vaultId\",\"type\":\"uint256\"}],\"name\":\"vaults\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"activateChildChain\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_exitGame\",\"type\":\"address\"}],\"name\":\"exitGameToTxType\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CHILD_BLOCK_INTERVAL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nextDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_txType\",\"type\":\"uint256\"}],\"name\":\"exitGames\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_blockRoot\",\"type\":\"bytes32\"}],\"name\":\"submitBlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_blockRoot\",\"type\":\"bytes32\"}],\"name\":\"submitDepositBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"authority\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"hasExitQueue\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"delegations\",\"outputs\":[{\"internalType\":\"contract IExitProcessor\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minExitPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"topExitId\",\"type\":\"uint160\"},{\"internalType\":\"uint256\",\"name\":\"maxExitsToProcess\",\"type\":\"uint256\"}],\"name\":\"processExits\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_outputIds\",\"type\":\"bytes32[]\"}],\"name\":\"batchFlagOutputsFinalized\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vaultAddress\",\"type\":\"address\"}],\"name\":\"vaultToId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNum\",\"type\":\"uint256\"}],\"name\":\"isDeposit\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"blocks\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_txType\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"_protocol\",\"type\":\"uint8\"}],\"name\":\"registerExitGame\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"activateNonReentrant\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minExitPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_initialImmuneVaults\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_initialImmuneExitGames\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_authority\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_maintainer\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"blknum\",\"type\":\"uint256\"}],\"name\":\"BlockSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"authority\",\"type\":\"address\"}],\"name\":\"ChildChainActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"ExitQueueAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"processedNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"ProcessedExitsNum\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint160\",\"name\":\"exitId\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"priority\",\"type\":\"uint256\"}],\"name\":\"ExitQueued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"txType\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"exitGameAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"protocol\",\"type\":\"uint8\"}],\"name\":\"ExitGameRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"vaultAddress\",\"type\":\"address\"}],\"name\":\"VaultRegistered\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"activateChildChain()\":{\"details\":\"This is a preserved action for authority account to start its nonce with 1.     Child chain rely ethereum nonce to protect re-org: https://git.io/JecDG     see discussion: https://git.io/JenaT, https://git.io/JecDO\"},\"activateNonReentrant()\":{\"details\":\"Accessible only from non quarantined exit games, uses a mutex\"},\"addExitQueue(uint256,address)\":{\"details\":\"The queue is created as a new contract instance\",\"params\":{\"token\":\"Address of the token\",\"vaultId\":\"ID of the vault\"}},\"batchFlagOutputsFinalized(bytes32[])\":{\"params\":{\"_outputIds\":\"Output IDs to flag\"}},\"deactivateNonReentrant()\":{\"details\":\"Accessible only from non quarantined exit games, uses a mutex\"},\"enqueue(uint256,address,uint64,(uint64,uint16,uint16),uint160,address)\":{\"details\":\"emits ExitQueued event, which can be used to back trace the priority inside the queueCaller of this function should add \\\"pragma experimental ABIEncoderV2;\\\" on top of filePriority (exitableAt, txPos, exitId) must be unique per queue. Do not enqueue when the same priority is already in the queue.\",\"params\":{\"exitId\":\"ID used by the exit processor contract to determine how to process the exit\",\"exitProcessor\":\"The exit processor contract, called during \\\"processExits\\\"\",\"exitableAt\":\"The earliest time a specified exit can be processed\",\"token\":\"Token for the exit\",\"txPos\":\"Transaction position for the exit priority. For SE it should be the exit tx, for IFE it should be the youngest input tx position.\",\"vaultId\":\"Vault ID of the vault that stores exiting funds\"},\"return\":\"A unique priority number computed for the exit\"},\"flagOutputFinalized(bytes32)\":{\"params\":{\"_outputId\":\"The output ID to flag as spent\"}},\"hasExitQueue(uint256,address)\":{\"params\":{\"token\":\"Address of the token\",\"vaultId\":\"ID of the vault that handles the token\"},\"return\":\"bool Defines whether the queue for a token was created\"},\"isAnyOutputFinalized(bytes32[])\":{\"params\":{\"_outputIds\":\"Output IDs to check\"}},\"isExitGameSafeToUse(address)\":{\"details\":\"Exposes information about exit games quarantine\",\"params\":{\"_contract\":\"Address of the exit game contract\"},\"return\":\"boolean Whether the contract is safe to use and is not under quarantine\"},\"processExits(uint256,address,uint160,uint256)\":{\"details\":\"Emits ProcessedExitsNum event\",\"params\":{\"maxExitsToProcess\":\"Maximum number of exits to process\",\"token\":\"The token type to process\",\"topExitId\":\"Unique identifier for prioritizing the first exit to process. Set to zero to skip this check.\",\"vaultId\":\"Vault ID of the vault that stores exiting funds\"},\"return\":\"Total number of processed exits\"},\"registerExitGame(uint256,address,uint8)\":{\"details\":\"Emits ExitGameRegistered event to notify clients\",\"params\":{\"_contract\":\"Address of the exit game contract\",\"_protocol\":\"The transaction protocol, either 1 for MVP or 2 for MoreVP\",\"_txType\":\"The tx type where the exit game wants to register\"}},\"registerVault(uint256,address)\":{\"details\":\"emits VaultRegistered event to notify clients\",\"params\":{\"_vaultAddress\":\"Address of the vault contract\",\"_vaultId\":\"The ID for the vault contract to register\"}},\"setVersion(string)\":{\"params\":{\"_version\":\"is semver string\"}},\"submitBlock(bytes32)\":{\"details\":\"emit BlockSubmitted eventBlock number jumps 'childBlockInterval' per submissionSee discussion in https://github.com/omisego/plasma-contracts/issues/233\",\"params\":{\"_blockRoot\":\"Merkle root of the Plasma block\"}},\"submitDepositBlock(bytes32)\":{\"details\":\"Block number adds 1 per submission; it's possible to have at most 'childBlockInterval' deposit blocks between two child chain blocks\",\"params\":{\"_blockRoot\":\"Merkle root of the Plasma block\"},\"return\":\"The deposit block number\"}}},\"userdoc\":{\"methods\":{\"activateChildChain()\":{\"notice\":\"Activates the child chain so that child chain can start to submit child blocks to root chainCan only be called once by the authority.Sets isChildChainActivated to true and emits the ChildChainActivated event.\"},\"activateNonReentrant()\":{\"notice\":\"Activates non reentrancy mode        Guards against reentering into publicly accessible code that modifies state related to exits\"},\"addExitQueue(uint256,address)\":{\"notice\":\"Adds queue to the Plasma framework\"},\"batchFlagOutputsFinalized(bytes32[])\":{\"notice\":\"Batch flags already spent outputs\"},\"deactivateNonReentrant()\":{\"notice\":\"Deactivates non reentrancy mode\"},\"enqueue(uint256,address,uint64,(uint64,uint16,uint16),uint160,address)\":{\"notice\":\"Enqueue exits from exit game contracts is a function that places the exit into the        priority queue to enforce the priority of exit during 'processExits'\"},\"exitGameToTxType(address)\":{\"notice\":\"Public getter for retrieving tx type with exit game address\"},\"exitGames(uint256)\":{\"notice\":\"Public getter for retrieving exit game address with tx type\"},\"flagOutputFinalized(bytes32)\":{\"notice\":\"Flags a single output as spent\"},\"getVersion()\":{\"notice\":\"Gets the semantic version of the current deployed contracts\"},\"hasExitQueue(uint256,address)\":{\"notice\":\"Checks if the queue for a specified token was created\"},\"isAnyOutputFinalized(bytes32[])\":{\"notice\":\"Checks whether any of the output with the given outputIds is already spent\"},\"isExitGameSafeToUse(address)\":{\"notice\":\"Checks whether the contract is safe to use and is not under quarantine\"},\"processExits(uint256,address,uint160,uint256)\":{\"notice\":\"Processes any exits that have completed the challenge period. Exits are processed according to the exit priority.\"},\"protocols(uint256)\":{\"notice\":\"Public getter for retrieving protocol with tx type\"},\"registerExitGame(uint256,address,uint8)\":{\"notice\":\"Registers an exit game within the PlasmaFramework. Only the maintainer can call the function.\"},\"registerVault(uint256,address)\":{\"notice\":\"Register a vault within the PlasmaFramework. Only a maintainer can make the call.\"},\"setVersion(string)\":{\"notice\":\"Sets the semantic version of the current deployed contracts\"},\"submitBlock(bytes32)\":{\"notice\":\"Allows the authority to submit the Merkle root of a Plasma block\"},\"submitDepositBlock(bytes32)\":{\"notice\":\"Submits a block for deposit\"},\"vaultToId(address)\":{\"notice\":\"Public getter for retrieving vault ID with vault address\"},\"vaults(uint256)\":{\"notice\":\"Public getter for retrieving vault address with vault ID\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/PlasmaFramework.sol\":\"PlasmaFramework\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/BlockController.sol\":{\"keccak256\":\"0xac302eceee96e5a83b7fdfb43d23389f516ff4b7322e5e094d7ad0b3be177c0b\",\"urls\":[\"bzz-raw://cf36aec949574838af497c6448000226d20aea4d0a787c746dd10775166df8a3\",\"dweb:/ipfs/QmQvD1DZfeidC1xiC3fnzTbCcgTTG9MuN6NNwKn965bVvC\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/ExitGameController.sol\":{\"keccak256\":\"0x136c47ad99baab47c0a90499bf359706d1d34bb7de8573ce3f2868bf1440acd8\",\"urls\":[\"bzz-raw://d1291a1b667dc916958dd9d0be246fe6e7601bc0c08be6a7e11747214a94ef59\",\"dweb:/ipfs/QmampH1Xg4Z5KzToYR5Sngt36EFL45psZWtdfstSm9AVoS\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/PlasmaFramework.sol\":{\"keccak256\":\"0x4b017fa7cae50fcf79803255fe0ffe8183e8f3934d9ac46a48235986f4714179\",\"urls\":[\"bzz-raw://30974a631b8c13aedea212390fcc1cf75472dc3f49a9c52eb33fc07c04b545e1\",\"dweb:/ipfs/QmT15Bw5NtE7b1RvVcmRXcGkEAL9BpbbgKwMtJBphXTbLd\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/Protocol.sol\":{\"keccak256\":\"0x81e37c136c340d917e370c58894761aee710bbef727414685490e405bc0f18e8\",\"urls\":[\"bzz-raw://7a54192b587531dd1adc33202479142afdf116385bab22daa153b8d4439d7333\",\"dweb:/ipfs/QmT37F3SCsWLf93okFrx1LUUr6c2zXCj28u2sjXXFBef2X\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/interfaces/IExitProcessor.sol\":{\"keccak256\":\"0x93c31f7c8ff69c80bd30f9296a7b2059affedadefc0c2cfb5c992eb1f1885fa2\",\"urls\":[\"bzz-raw://d56cb65fd67b07cec3bb17f48c064df4ea892780bf21d87d717e6581feb92ffd\",\"dweb:/ipfs/QmZZGPdSSN81c2P1CBnrCQD9mRWntPUPUjm4vCgWsBqS14\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/models/BlockModel.sol\":{\"keccak256\":\"0x7d26be621a43e2b8855f6c71f91c886d3b48ed809f421a1eee9c165c803d0cf7\",\"urls\":[\"bzz-raw://850b2acb61d96e9eb09d8bf24617ecf47aa948d6754b2d09d0e0d2b949193a2d\",\"dweb:/ipfs/QmW8yoi4jZxHAJf4bNjtt3nGckaWUEX92ZbgrKpoRHJGRM\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/registries/ExitGameRegistry.sol\":{\"keccak256\":\"0x4695a609c60b6be59bbc49ed6d3b14725bcc2efcecd083f8cabbcd3ddb399e68\",\"urls\":[\"bzz-raw://d31ca9188c426bbb2e8cf0fca61a9d451497408ddb4708cfc78d543b75fcb274\",\"dweb:/ipfs/QmawYeD9CCd5chGoB62zVKpk5Q9zJxhUUGJu7hUaCF5JXM\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/registries/VaultRegistry.sol\":{\"keccak256\":\"0x7786b4b8b043026655fa872f11ec747ef600100cc73da38369e1e2fd5047c95a\",\"urls\":[\"bzz-raw://b957490e53281e516290455b78722627f5536e0bd6b9bc17777f3f7a93ed9b14\",\"dweb:/ipfs/QmbUEwWfkTCSPPNEjAJUEXwgCCY9cBPgAKJagRbYQ3PSLE\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/utils/ExitPriority.sol\":{\"keccak256\":\"0x18a6c6b1f8c072e693d855bc8991ea4c51951f9058fd116253a1b8ccb6fc1647\",\"urls\":[\"bzz-raw://a22420b5f647d6108be8a3de23b5dd561f65b12dd804ead7edf5384407a506f3\",\"dweb:/ipfs/QmTd986YDqtwQ1eXqUP4esUBKxGthieXJWkQTsMJzewXgA\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/utils/PriorityQueue.sol\":{\"keccak256\":\"0xf46de2038d5fbc06f1aba7f36e7e02ead27485044ccf25afc2b9ad84ea705991\",\"urls\":[\"bzz-raw://a23fd7ad08f351743c7599fa546a0b54586e7e319c00c3e9d41c3aa10546ec5d\",\"dweb:/ipfs/QmWH32SoQmhyy7CE8u8g412e1AosogVE3eEBjrAh9MABvb\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/utils/Quarantine.sol\":{\"keccak256\":\"0x1b685ea3de626e3d8961d0e384a67c3e87752874784cc2e59777857d130f2390\",\"urls\":[\"bzz-raw://28c30354aa580476f230c4d8e151d34337b923caabc6bccfe560d75ef37d446e\",\"dweb:/ipfs/Qmf9nCYFBhHDyMgHmxX5pSkqLpqb2W3XffPopdkJTHmnAA\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/utils/OnlyFromAddress.sol\":{\"keccak256\":\"0x54d4cb74bf5c448bb383ff4ffce898473739a5ba015e439dae1c092c70df943f\",\"urls\":[\"bzz-raw://5c9efbe363534d6746573b9b0dda687d257272c3ce0123b6a45bc7eef55a40b4\",\"dweb:/ipfs/QmZPLF1bKdU6DAZZcxWfMudUwzeubLxsSk14x8hvUMj15X\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/utils/PosLib.sol\":{\"keccak256\":\"0xd47b38ef93cf913b6b7a3bf608dec2c084108d090cc02b222da3d8eb39819d5f\",\"urls\":[\"bzz-raw://c42d551c21adfa400d08108673b29e4bd1eec70aaa469287571071df3f8f0bc1\",\"dweb:/ipfs/Qmepq632azqUDHt5ypVwmkTfeQG8uP1HYw8x1H3Hdg9K6R\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610\",\"dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1\",\"urls\":[\"bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf\",\"dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3\"]}},\"version\":1}",
  "bytecode": "0x6080604052600e805460ff191690553480156200001b57600080fd5b5060405162003a8538038062003a858339810160408190526200003e91620000d5565b600285026003556004938455928402600955600a91909155600e8054610100600160a81b0319166101006001600160a01b03938416021790556103e8600f81905560105560016011556012805460ff19169055601492909255601580546001600160a01b031916929091169190911790556200018f565b8051620000c2816200016a565b92915050565b8051620000c28162000184565b600080600080600060a08688031215620000ee57600080fd5b6000620000fc8888620000c8565b95505060206200010f88828901620000c8565b94505060406200012288828901620000c8565b93505060606200013588828901620000b5565b92505060806200014888828901620000b5565b9150509295509295909350565b60006001600160a01b038216620000c2565b90565b620001758162000155565b81146200018157600080fd5b50565b620001758162000167565b6138e6806200019f6000396000f3fe60806040523480156200001157600080fd5b5060043610620002685760003560e01c80638e29be31116200014d578063c77b1ed611620000c9578063dfb494f01162000087578063dfb494f01462000520578063ebde2ec91462000537578063f25b3f99146200054e578063f2e208e71462000575578063ff27b189146200058c5762000268565b8063c77b1ed614620004ba578063cf049cad14620004d1578063d4a2b4ef14620004e8578063d9aa4b2414620004f2578063dbe3913214620005095762000268565b8063a8cabcd51162000117578063a8cabcd51462000461578063af079764146200046b578063baa476941462000482578063be5ac6981462000499578063bf7e214f14620004b05762000268565b80638e29be31146200041f578063a11dcc341462000436578063a239e5a21462000440578063a831fa0714620004575762000268565b80634ca8714f11620001e9578063788bc78c11620001a7578063788bc78c14620003aa5780637f8523d114620003c15780638701fc5d14620003d85780638c39622014620003e25780638c64ea4a14620004085762000268565b80634ca8714f146200035e5780634e0f7436146200036857806354fd4d5014620003725780635a102dae146200037c5780636a51fd6314620003935762000268565b80632f75f18711620002375780632f75f18714620002e75780633701b5ca14620002fe57806338a9e0bc146200032457806345f20935146200032e5780634b0a72bc14620003455762000268565b80630d8e6e2c146200026d5780630e71ee02146200028f57806317d73e1b14620002a8578063296d542714620002c1575b600080fd5b6200027762000596565b60405162000286919062002ac1565b60405180910390f35b6200029962000631565b60405162000286919062002a82565b620002bf620002b936600462001f0a565b6200063a565b005b620002d8620002d236600462001fa6565b620006e0565b60405162000286919062002d26565b62000299620002f836600462001ec4565b62000785565b620003156200030f36600462001f0a565b620007e9565b60405162000286919062002ab1565b620002d862000804565b620002bf6200033f36600462001fa6565b6200080a565b6200034f620008ff565b60405162000286919062002a72565b620002d86200090e565b620002bf62000914565b620002776200098f565b620002996200038d36600462001ea3565b62000a21565b620002bf620003a436600462001fa6565b62000a5e565b620002bf620003bb36600462001f2b565b62000bc5565b620002d8620003d23660046200204f565b62000c14565b620002d862000e0e565b620003f9620003f336600462001f0a565b62000e1c565b60405162000286919062002d93565b6200034f6200041936600462001f0a565b62000e31565b620002996200043036600462001f0a565b62000e4c565b620002bf62000e61565b620002d86200045136600462001ea3565b62000f17565b620002d862000f32565b620002d862000f38565b6200034f6200047c36600462001f0a565b62000f3e565b620002bf6200049336600462001f0a565b62000f59565b620002d8620004aa36600462001f0a565b62001027565b6200034f62001124565b62000299620004cb36600462001fa6565b62001138565b62000315620004e236600462001f0a565b62001154565b620002d86200116f565b620002bf6200050336600462001fe5565b62001175565b620002bf6200051a36600462001ec4565b62001652565b620002d86200053136600462001ea3565b6200173b565b620002996200054836600462001f0a565b62001756565b620005656200055f36600462001f0a565b6200179c565b6040516200028692919062002a92565b620002bf62000586366004620020e4565b620017b5565b620002bf6200196f565b60168054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620006265780601f10620005fa5761010080835404028352916020019162000626565b820191906000526020600020905b8154815290600101906020018083116200060857829003601f168201915b505050505090505b90565b60125460ff1681565b33600090815260066020526040902054620006725760405162461bcd60e51b8152600401620006699062002b88565b60405180910390fd5b6200068560083363ffffffff62001a0616565b15620006a55760405162461bcd60e51b8152600401620006699062002b52565b80620006c55760405162461bcd60e51b8152600401620006699062002b9a565b6000908152600d60205260409020805460ff19166001179055565b600080620006ef848462001a24565b6000818152600c602090815260409182902054825163d6362e9760e01b815292519394506001600160a01b03169263d6362e97926004808201939291829003018186803b1580156200074057600080fd5b505afa15801562000755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200077b919081019062001f85565b9150505b92915050565b6000805b82811015620007df57600d6000858584818110620007a357fe5b602090810292909201358352508101919091526040016000205460ff16151560011415620007d65760019150506200077f565b60010162000789565b5060009392505050565b600c602052600090815260409020546001600160a01b031681565b600f5481565b816200082a5760405162461bcd60e51b8152600401620006699062002cde565b600062000838838362001a24565b9050620008458162001a59565b15620008655760405162461bcd60e51b8152600401620006699062002ad4565b604051620008739062001c66565b604051809103906000f08015801562000890573d6000803e3d6000fd5b506000828152600c60205260409081902080546001600160a01b0319166001600160a01b039390931692909217909155517f0a925273fd754a41a580f8214815d5ae8a37367f561b3bd9d91a96730a418a1790620008f2908590859062002d36565b60405180910390a1505050565b6015546001600160a01b031690565b60105481565b33600090815260066020526040902054620009435760405162461bcd60e51b8152600401620006699062002b88565b6200095660083363ffffffff62001a0616565b15620009765760405162461bcd60e51b8152600401620006699062002b52565b600e5460ff166200098357fe5b600e805460ff19169055565b6016805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801562000a195780601f10620009ed5761010080835404028352916020019162000a19565b820191906000526020600020905b815481529060010190602001808311620009fb57829003601f168201915b505050505081565b6001600160a01b038116600090815260066020526040812054158015906200077f575062000a5760088363ffffffff62001a0616565b1592915050565b62000a68620008ff565b336001600160a01b0382161462000a935760405162461bcd60e51b8152600401620006699062002bf4565b8262000ab35760405162461bcd60e51b8152600401620006699062002bbe565b62000abe8262001a76565b62000add5760405162461bcd60e51b8152600401620006699062002c72565b6000838152602081905260409020546001600160a01b03161562000b155760405162461bcd60e51b8152600401620006699062002cba565b6001600160a01b0382166000908152600160205260409020541562000b4e5760405162461bcd60e51b8152600401620006699062002c84565b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915583526001909152902083905562000b9260028362001a7c565b7f7051aac27f9b76ec8f37bd5796f2dcf402bd840a1c45c952a6eeb0e11bde09968383604051620008f292919062002d36565b62000bcf620008ff565b336001600160a01b0382161462000bfa5760405162461bcd60e51b8152600401620006699062002bf4565b815162000c0f90601690602085019062001c74565b505050565b3360009081526006602052604081205462000c435760405162461bcd60e51b8152600401620006699062002b88565b62000c5660083363ffffffff62001a0616565b1562000c765760405162461bcd60e51b8152600401620006699062002b52565b600062000c84888862001a24565b905062000c918162001a59565b62000cb05760405162461bcd60e51b8152600401620006699062002b40565b6000818152600c60205260408120546001600160a01b03169062000ce68862000cdf368a90038a018a62001f64565b8862001b22565b6040516390b5561d60e01b81529091506001600160a01b038316906390b5561d9062000d1790849060040162002d26565b600060405180830381600087803b15801562000d3257600080fd5b505af115801562000d47573d6000803e3d6000fd5b50505050600062000d5a828c8c62001b58565b6000818152600b60205260409020549091506001600160a01b03161562000d955760405162461bcd60e51b8152600401620006699062002b2e565b6000818152600b60205260409081902080546001600160a01b0319166001600160a01b03898116919091179091559051908816907fe15a4f223f922b625f5fdd941101a23fa0c097e522233d47a7cbea2167e927019062000df890859062002d26565b60405180910390a2509998505050505050505050565b601154600f54601054030190565b60009081526007602052604090205460ff1690565b6000908152602081905260409020546001600160a01b031690565b600d6020526000908152604090205460ff1681565b600e5461010090046001600160a01b031633811462000e945760405162461bcd60e51b8152600401620006699062002bf4565b60125460ff161562000eba5760405162461bcd60e51b8152600401620006699062002c06565b60128054600160ff19909116179055600e546040517fb8421a1acb5f1e701a4f11ecaad76fa438b3947e8dfd6960b6086130e68e0aed9162000f0c916101009091046001600160a01b03169062002a72565b60405180910390a150565b6001600160a01b031660009081526006602052604090205490565b6103e881565b60115481565b6000908152600560205260409020546001600160a01b031690565b600e5461010090046001600160a01b031633811462000f8c5760405162461bcd60e51b8152600401620006699062002bf4565b60125460ff16151560011462000fb65760405162461bcd60e51b8152600401620006699062002b1c565b60108054604080518082018252858152426020808301918252600085815260139091528390209151825551600191820155600f5484540190935560119290925590517f5a978f4723b249ccf79cd7a658a8601ce1ff8b89fc770251a6be35216351ce3290620008f290839062002d26565b33600090815260016020526040812054620010565760405162461bcd60e51b8152600401620006699062002c18565b6200106960023363ffffffff62001a0616565b15620010895760405162461bcd60e51b8152600401620006699062002ccc565b60125460ff161515600114620010b35760405162461bcd60e51b8152600401620006699062002b1c565b600f5460115410620010d95760405162461bcd60e51b8152600401620006699062002ca8565b6000620010e562000e0e565b60408051808201825294855242602080870191825260008481526013909152919091209451855551600194850155601180549094019093555090919050565b600e5461010090046001600160a01b031681565b60008062001147848462001a24565b90506200077b8162001a59565b600b602052600090815260409020546001600160a01b031681565b60145481565b600e5460ff16156200119b5760405162461bcd60e51b8152600401620006699062002c2a565b600e805460ff191660011790556000620011b6858562001a24565b9050620011c38162001a59565b620011e25760405162461bcd60e51b8152600401620006699062002c60565b6000818152600c6020908152604080832054815163bda1504b60e01b815291516001600160a01b039091169392849263bda1504b9260048083019392829003018186803b1580156200123357600080fd5b505afa15801562001248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200126e919081019062001f85565b116200128e5760405162461bcd60e51b8152600401620006699062002c96565b6000816001600160a01b031663d6362e976040518163ffffffff1660e01b815260040160206040518083038186803b158015620012ca57600080fd5b505afa158015620012df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062001305919081019062001f85565b9050600062001314826200062e565b90506001600160a01b03861615806200133e5750856001600160a01b0316816001600160a01b0316145b6200135d5760405162461bcd60e51b8152600401620006699062002bac565b60006200136c838a8a62001b58565b6000818152600b60205260408120549192506001600160a01b03909116905b8781108015620013ae575042620013a28662001b90565b67ffffffffffffffff16105b15620015ef576000838152600b6020908152604080832080546001600160a01b03191690558051632c1d5dab60e21b815290516001600160a01b038a169363b07576ac93600480850194919392918390030190829087803b1580156200141357600080fd5b505af115801562001428573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200144e919081019062001f85565b50604051636849635160e01b81526001909101906001600160a01b03831690636849635190620014879087908f908f9060040162002cf0565b600060405180830381600087803b158015620014a257600080fd5b505af1158015620014b7573d6000803e3d6000fd5b50505050856001600160a01b031663bda1504b6040518163ffffffff1660e01b815260040160206040518083038186803b158015620014f557600080fd5b505afa1580156200150a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062001530919081019062001f85565b6200153b57620015ef565b856001600160a01b031663d6362e976040518163ffffffff1660e01b815260040160206040518083038186803b1580156200157557600080fd5b505afa1580156200158a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620015b0919081019062001f85565b9450620015bf858c8c62001b58565b9250620015cc856200062e565b6000848152600b60205260409020549094506001600160a01b031691506200138b565b7f7e35599fe450e626673ce6c37179ef9820aed16f76c1b350618ef7a612d13005818c8c604051620016249392919062002d83565b60405180910390a15050600e5460ff16945062001642935050505057fe5b5050600e805460ff191690555050565b33600090815260066020526040902054620016815760405162461bcd60e51b8152600401620006699062002b88565b6200169460083363ffffffff62001a0616565b15620016b45760405162461bcd60e51b8152600401620006699062002b52565b60005b8181101562000c0f576000838383818110620016cf57fe5b905060200201351415620016f75760405162461bcd60e51b8152600401620006699062002b9a565b6001600d60008585858181106200170a57fe5b60209081029290920135835250810191909152604001600020805460ff1916911515919091179055600101620016b7565b6001600160a01b031660009081526001602052604090205490565b600081815260136020526040812060010154620017875760405162461bcd60e51b8152600401620006699062002ae6565b600f5482816200179357fe5b06151592915050565b6013602052600090815260409020805460019091015482565b620017bf620008ff565b336001600160a01b03821614620017ea5760405162461bcd60e51b8152600401620006699062002bf4565b836200180a5760405162461bcd60e51b8152600401620006699062002bd0565b620018158362001a76565b620018345760405162461bcd60e51b8152600401620006699062002c72565b6000848152600560205260409020546001600160a01b0316156200186c5760405162461bcd60e51b8152600401620006699062002c3c565b6001600160a01b03831660009081526006602052604090205415620018a55760405162461bcd60e51b8152600401620006699062002af8565b620018b08262001b96565b620018cf5760405162461bcd60e51b8152600401620006699062002b0a565b600084815260056020908152604080832080546001600160a01b0319166001600160a01b03881690811790915583526006825280832087905586835260079091529020805460ff191660ff84161790556200192c60088462001a7c565b7f0ceb02f7474c01f5959171cead2f5fb2a44d9c16fe480725a2110b601b19db82848484604051620019619392919062002d55565b60405180910390a150505050565b336000908152600660205260409020546200199e5760405162461bcd60e51b8152600401620006699062002b88565b620019b160083363ffffffff62001a0616565b15620019d15760405162461bcd60e51b8152600401620006699062002b52565b600e5460ff1615620019f75760405162461bcd60e51b8152600401620006699062002c2a565b600e805460ff19166001179055565b6001600160a01b031660009081526020919091526040902054421090565b6000828260405160200162001a3b92919062002a0b565b60405160208183030381529060405280519060200120905092915050565b6000908152600c60205260409020546001600160a01b0316151590565b3b151590565b6001600160a01b03811662001aa55760405162461bcd60e51b8152600401620006699062002be2565b6001600160a01b0381166000908152602083905260409020541562001ade5760405162461bcd60e51b8152600401620006699062002b64565b600282015462001b115760018201546001600160a01b038216600090815260208490526040902042909101905562001b1e565b6002820180546000190190555b5050565b6000816001600160a01b031660a062001b3b8562001bb0565b901b60d68667ffffffffffffffff16901b171790505b9392505050565b600083838360405160200162001b719392919062002a35565b6040516020818303038152906040528051906020012090509392505050565b60d61c90565b600060ff8216600114806200077f57505060ff1660021490565b600061271062001bc08362001bcf565b8162001bc857fe5b0492915050565b6000600161271003826040015161ffff16111562001c015760405162461bcd60e51b8152600401620006699062002b76565b81516429f16b11c667ffffffffffffffff909116111562001c365760405162461bcd60e51b8152600401620006699062002c4e565b5060408101516020820151825167ffffffffffffffff16633b9aca000261ffff9182166127100201911601919050565b61099e8062002f0683390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062001cb757805160ff191683800117855562001ce7565b8280016001018555821562001ce7579182015b8281111562001ce757825182559160200191906001019062001cca565b5062001cf592915062001cf9565b5090565b6200062e91905b8082111562001cf5576000815560010162001d00565b80356200077f8162002ea9565b60008083601f84011262001d3657600080fd5b50813567ffffffffffffffff81111562001d4f57600080fd5b60208301915083602082028301111562001d6857600080fd5b9250929050565b80356200077f8162002ec3565b80356200077f8162002ece565b600082601f83011262001d9b57600080fd5b813562001db262001dac8262002dcb565b62002da3565b9150808252602083016020830185838301111562001dcf57600080fd5b62001ddc83828462002e46565b50505092915050565b60006060828403121562001df857600080fd5b50919050565b60006060828403121562001e1157600080fd5b62001e1d606062002da3565b9050600062001e2d848462001e89565b825250602062001e408484830162001e62565b602083015250604062001e568482850162001e62565b60408301525092915050565b80356200077f8162002ed9565b80356200077f8162002ee4565b80516200077f8162002ec3565b80356200077f8162002eef565b80356200077f8162002efa565b60006020828403121562001eb657600080fd5b60006200077b848462001d16565b6000806020838503121562001ed857600080fd5b823567ffffffffffffffff81111562001ef057600080fd5b62001efe8582860162001d23565b92509250509250929050565b60006020828403121562001f1d57600080fd5b60006200077b848462001d6f565b60006020828403121562001f3e57600080fd5b813567ffffffffffffffff81111562001f5657600080fd5b6200077b8482850162001d89565b60006060828403121562001f7757600080fd5b60006200077b848462001dfe565b60006020828403121562001f9857600080fd5b60006200077b848462001e7c565b6000806040838503121562001fba57600080fd5b600062001fc8858562001d6f565b925050602062001fdb8582860162001d16565b9150509250929050565b6000806000806080858703121562001ffc57600080fd5b60006200200a878762001d6f565b94505060206200201d8782880162001d16565b9350506040620020308782880162001e6f565b9250506060620020438782880162001d6f565b91505092959194509250565b60008060008060008061010087890312156200206a57600080fd5b600062002078898962001d6f565b96505060206200208b89828a0162001d16565b95505060406200209e89828a0162001e89565b9450506060620020b189828a0162001de5565b93505060c0620020c489828a0162001e6f565b92505060e0620020d789828a0162001d7c565b9150509295509295509295565b600080600060608486031215620020fa57600080fd5b600062002108868662001d6f565b93505060206200211b8682870162001d16565b92505060406200212e8682870162001e96565b9150509250925092565b620021438162002e01565b82525050565b62002143620021588262002e01565b62002e85565b620021438162002e0e565b62002143816200062e565b620021438162002e13565b60006200218c8262002df4565b62002198818562002df8565b9350620021aa81856020860162002e52565b620021b58162002e99565b9093019392505050565b6000620021ce60118362002df8565b70457869742071756575652065786973747360781b815260200192915050565b6000620021fd60148362002df8565b73109b1bd8dac8191bd95cc81b9bdd08195e1a5cdd60621b815260200192915050565b60006200222f602c8362002df8565b7f54686520657869742067616d6520636f6e747261637420697320616c7265616481526b1e481c9959da5cdd195c995960a21b602082015260400192915050565b60006200227f60168362002df8565b75496e76616c69642070726f746f636f6c2076616c756560501b815260200192915050565b6000620022b3603b8362002df8565b7f4368696c6420636861696e20686173206e6f74206265656e206163746976617481527f656420627920617574686f726974792061646472657373207965740000000000602082015260400192915050565b60006200231460258362002df8565b7f5468652073616d65207072696f7269747920697320616c726561647920656e718152641d595d595960da1b602082015260400192915050565b60006200235d60508362002df8565b7f54686520717565756520666f722074686520287661756c7449642c20746f6b6581527f6e292070616972206973206e6f742079657420616464656420746f207468652060208201526f506c61736d61206672616d65776f726b60801b604082015260600192915050565b6000620023d760178362002df8565b7f4578697447616d652069732071756172616e74696e6564000000000000000000815260200192915050565b60006200241260238362002df8565b7f54686520636f6e747261637420697320616c72656164792071756172616e74698152621b995960ea1b602082015260400192915050565b60006200245960148362002df8565b73092dcecc2d8d2c840deeae8e0eae840d2dcc8caf60631b815260200192915050565b60006200248b60348362002df8565b7f5468652063616c6c206973206e6f742066726f6d2061207265676973746572658152731908195e1a5d0819d85b594818dbdb9d1c9858dd60621b602082015260400192915050565b6000620024e360238362002df8565b7f53686f756c64206e6f7420666c6167207769746820656d707479206f757470758152621d125960ea1b602082015260400192915050565b60006200252a603a8362002df8565b7f546f702065786974204944206f6620746865207175657565206973206469666681527f6572656e7420746f20746865206f6e6520737065636966696564000000000000602082015260400192915050565b60006200258b60238362002df8565b7f53686f756c64206e6f742072656769737465722077697468207661756c74204981526204420360ec1b602082015260400192915050565b6000620025d260228362002df8565b7f53686f756c64206e6f7420726567697374657220776974682074782074797065815261020360f41b602082015260400192915050565b60006200261860268362002df8565b7f416e20656d70747920616464726573732063616e6e6f742062652071756172618152651b9d1a5b995960d21b602082015260400192915050565b600062002662601e8362002df8565b7f43616c6c6572206164647265737320697320756e617574686f72697a65640000815260200192915050565b60006200269d601d8362002df8565b7f4368696c6420636861696e20616c726561647920616374697661746564000000815260200192915050565b6000620026d860278362002df8565b7f5468652063616c6c206973206e6f742066726f6d20612072656769737465726581526619081d985d5b1d60ca1b602082015260400192915050565b600062002723600e8362002df8565b6d1499595b9d1c985b9d0818d85b1b60921b815260200192915050565b60006200274f60218362002df8565b7f546865207478207479706520697320616c7265616479207265676973746572658152601960fa1b602082015260400192915050565b60006200279460148362002df8565b7324b73b30b634b210313637b1b590373ab6b132b960611b815260200192915050565b6000620027c660328362002df8565b7f54686520746f6b656e206973206e6f742079657420616464656420746f2074688152716520506c61736d61206672616d65776f726b60701b602082015260400192915050565b60006200281c602f8362002df8565b7f53686f756c64206e6f7420726567697374657220776974682061206e6f6e2d6381526e6f6e7472616374206164647265737360881b602082015260400192915050565b60006200286f60288362002df8565b7f546865207661756c7420636f6e747261637420697320616c726561647920726581526719da5cdd195c995960c21b602082015260400192915050565b6000620028bb60138362002df8565b724578697420717565756520697320656d70747960681b815260200192915050565b6000620028ec60338362002df8565b7f4578636565646564206c696d6974206f66206465706f736974732070657220638152721a1a5b1908189b1bd8dac81a5b9d195c9d985b606a1b602082015260400192915050565b60006200294360228362002df8565b7f546865207661756c7420494420697320616c7265616479207265676973746572815261195960f21b602082015260400192915050565b60006200298960148362002df8565b7315985d5b1d081a5cc81c5d585c985b9d1a5b995960621b815260200192915050565b6000620029bb60168362002df8565b7505661756c74204944206d757374206e6f7420626520360541b815260200192915050565b620021438162002e27565b62002143620029fa826200062e565b6200062e565b620021438162002e40565b600062002a198285620029eb565b60208201915062002a2b828462002149565b5060140192915050565b600062002a438286620029eb565b60208201915062002a558285620029eb565b60208201915062002a67828462002149565b506014019392505050565b602081016200077f828462002138565b602081016200077f82846200215e565b6040810162002aa2828562002169565b62001b51602083018462002169565b602081016200077f828462002174565b6020808252810162001b5181846200217f565b602080825281016200077f81620021bf565b602080825281016200077f81620021ee565b602080825281016200077f8162002220565b602080825281016200077f8162002270565b602080825281016200077f81620022a4565b602080825281016200077f8162002305565b602080825281016200077f816200234e565b602080825281016200077f81620023c8565b602080825281016200077f8162002403565b602080825281016200077f816200244a565b602080825281016200077f816200247c565b602080825281016200077f81620024d4565b602080825281016200077f816200251b565b602080825281016200077f816200257c565b602080825281016200077f81620025c3565b602080825281016200077f8162002609565b602080825281016200077f8162002653565b602080825281016200077f816200268e565b602080825281016200077f81620026c9565b602080825281016200077f8162002714565b602080825281016200077f8162002740565b602080825281016200077f8162002785565b602080825281016200077f81620027b7565b602080825281016200077f816200280d565b602080825281016200077f8162002860565b602080825281016200077f81620028ac565b602080825281016200077f81620028dd565b602080825281016200077f8162002934565b602080825281016200077f816200297a565b602080825281016200077f81620029ac565b6060810162002d008286620029e0565b62002d0f602083018562002169565b62002d1e604083018462002138565b949350505050565b602081016200077f828462002169565b6040810162002d46828562002169565b62001b51602083018462002138565b6060810162002d65828662002169565b62002d74602083018562002138565b62002d1e604083018462002a00565b6060810162002d00828662002169565b602081016200077f828462002a00565b60405181810167ffffffffffffffff8111828210171562002dc357600080fd5b604052919050565b600067ffffffffffffffff82111562002de357600080fd5b506020601f91909101601f19160190565b5190565b90815260200190565b60006200077f8262002e27565b151590565b60006200077f8262002e01565b61ffff1690565b6001600160a01b031690565b67ffffffffffffffff1690565b60ff1690565b82818337506000910152565b60005b8381101562002e6f57818101518382015260200162002e55565b8381111562002e7f576000848401525b50505050565b60006200077f8260006200077f8262002ea3565b601f01601f191690565b60601b90565b62002eb48162002e01565b811462002ec057600080fd5b50565b62002eb4816200062e565b62002eb48162002e13565b62002eb48162002e20565b62002eb48162002e27565b62002eb48162002e33565b62002eb48162002e4056fe608060405234801561001057600080fd5b506040805160208101909152600080825261002c916001610049565b506000600155600280546001600160a01b031916331790556100b6565b828054828255906000526020600020908101928215610089579160200282015b82811115610089578251829060ff16905591602001919060010190610069565b50610095929150610099565b5090565b6100b391905b80821115610095576000815560010161009f565b90565b6108d9806100c56000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bda1504b1161005b578063bda1504b14610113578063d6362e971461011b578063e10d29ee14610123578063e9de55531461012b5761007d565b8063446b2f881461008257806390b5561d146100da578063b07576ac146100f9575b600080fd5b61008a61014f565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156100c65781810151838201526020016100ae565b505050509050019250505060405180910390f35b6100f7600480360360208110156100f057600080fd5b50356101aa565b005b610101610263565b60408051918252519081900360200190f35b6101016103c5565b6101016103cb565b610101610432565b610133610438565b604080516001600160a01b039092168252519081900360200190f35b60606000800180548060200260200160405190810160405280929190818152602001828054801561019f57602002820191906000526020600020905b81548152602001906001019080831161018b575b505050505090505b90565b6002546001600160a01b031633811461020a576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206164647265737320697320756e617574686f72697a65640000604482015290519081900360640190fd5b60008054600181810183559180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56301839055805461024e9163ffffffff61044716565b600181905561025f906000906104aa565b5050565b6002546000906001600160a01b03163381146102c6576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206164647265737320697320756e617574686f72697a65640000604482015290519081900360640190fd5b60015461030b576040805162461bcd60e51b815260206004820152600e60248201526d517565756520697320656d70747960901b604482015290519081900360640190fd5b60008060000160018154811061031d57fe5b6000918252602082200154600154825491935090811061033957fe5b90600052602060002001546000800160018154811061035457fe5b60009182526020822001919091556001548154811061036f57fe5b60009182526020822001556001805461038d9163ffffffff61058016565b600190815561039e906000906105dd565b6000546103b290600163ffffffff61058016565b6103bd600082610840565b5091505b5090565b60015490565b600154600090610413576040805162461bcd60e51b815260206004820152600e60248201526d517565756520697320656d70747960901b604482015290519081900360640190fd5b60008054600190811061042257fe5b9060005260206000200154905090565b60015481565b6002546001600160a01b031681565b6000828201838110156104a1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b8154819081906000908590839081106104bf57fe5b906000526020600020015490505b846104df84600263ffffffff6106b416565b815481106104e957fe5b9060005260206000200154811015610555578461050d84600263ffffffff6106b416565b8154811061051757fe5b906000526020600020015485600001848154811061053157fe5b60009182526020909120015561054e83600263ffffffff6106b416565b92506104cd565b818314610579578085600001848154811061056c57fe5b6000918252602090912001555b5050505050565b6000828211156105d7576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b8154819081906000908590839081106105f257fe5b90600052602060002001549050600061060b868561071e565b90505b8560010154811115801561063a575085600001818154811061062c57fe5b906000526020600020015482115b156106885785600001818154811061064e57fe5b906000526020600020015486600001858154811061066857fe5b600091825260209091200155925082610681868261071e565b905061060e565b8284146106ac578186600001858154811061069f57fe5b6000918252602090912001555b505050505050565b600080821161070a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161071557fe5b04949350505050565b6001808301546000916107489061073c85600263ffffffff6107e716565b9063ffffffff61044716565b11156107665761075f82600263ffffffff6107e716565b90506104a4565b8261077d600161073c85600263ffffffff6107e716565b8154811061078757fe5b600091825260209091200154836107a584600263ffffffff6107e716565b815481106107af57fe5b906000526020600020015410156107d15761075f82600263ffffffff6107e716565b61075f600161073c84600263ffffffff6107e716565b6000826107f6575060006104a4565b8282028284828161080357fe5b04146104a15760405162461bcd60e51b81526004018080602001828103825260218152602001806108846021913960400191505060405180910390fd5b81548183558181111561086457600083815260209020610864918101908301610869565b505050565b6101a791905b808211156103c1576000815560010161086f56fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72315820c6d093e3cb861c2f3d7e0da0c41de597c3612f1688360db1a528767863989fe064736f6c634300050b0032a365627a7a7231582029fa75913584421d44582899a7748de9451b9a6ab336a09dce3dc63df0fe8fff6c6578706572696d656e74616cf564736f6c634300050b0040",
  "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620002685760003560e01c80638e29be31116200014d578063c77b1ed611620000c9578063dfb494f01162000087578063dfb494f01462000520578063ebde2ec91462000537578063f25b3f99146200054e578063f2e208e71462000575578063ff27b189146200058c5762000268565b8063c77b1ed614620004ba578063cf049cad14620004d1578063d4a2b4ef14620004e8578063d9aa4b2414620004f2578063dbe3913214620005095762000268565b8063a8cabcd51162000117578063a8cabcd51462000461578063af079764146200046b578063baa476941462000482578063be5ac6981462000499578063bf7e214f14620004b05762000268565b80638e29be31146200041f578063a11dcc341462000436578063a239e5a21462000440578063a831fa0714620004575762000268565b80634ca8714f11620001e9578063788bc78c11620001a7578063788bc78c14620003aa5780637f8523d114620003c15780638701fc5d14620003d85780638c39622014620003e25780638c64ea4a14620004085762000268565b80634ca8714f146200035e5780634e0f7436146200036857806354fd4d5014620003725780635a102dae146200037c5780636a51fd6314620003935762000268565b80632f75f18711620002375780632f75f18714620002e75780633701b5ca14620002fe57806338a9e0bc146200032457806345f20935146200032e5780634b0a72bc14620003455762000268565b80630d8e6e2c146200026d5780630e71ee02146200028f57806317d73e1b14620002a8578063296d542714620002c1575b600080fd5b6200027762000596565b60405162000286919062002ac1565b60405180910390f35b6200029962000631565b60405162000286919062002a82565b620002bf620002b936600462001f0a565b6200063a565b005b620002d8620002d236600462001fa6565b620006e0565b60405162000286919062002d26565b62000299620002f836600462001ec4565b62000785565b620003156200030f36600462001f0a565b620007e9565b60405162000286919062002ab1565b620002d862000804565b620002bf6200033f36600462001fa6565b6200080a565b6200034f620008ff565b60405162000286919062002a72565b620002d86200090e565b620002bf62000914565b620002776200098f565b620002996200038d36600462001ea3565b62000a21565b620002bf620003a436600462001fa6565b62000a5e565b620002bf620003bb36600462001f2b565b62000bc5565b620002d8620003d23660046200204f565b62000c14565b620002d862000e0e565b620003f9620003f336600462001f0a565b62000e1c565b60405162000286919062002d93565b6200034f6200041936600462001f0a565b62000e31565b620002996200043036600462001f0a565b62000e4c565b620002bf62000e61565b620002d86200045136600462001ea3565b62000f17565b620002d862000f32565b620002d862000f38565b6200034f6200047c36600462001f0a565b62000f3e565b620002bf6200049336600462001f0a565b62000f59565b620002d8620004aa36600462001f0a565b62001027565b6200034f62001124565b62000299620004cb36600462001fa6565b62001138565b62000315620004e236600462001f0a565b62001154565b620002d86200116f565b620002bf6200050336600462001fe5565b62001175565b620002bf6200051a36600462001ec4565b62001652565b620002d86200053136600462001ea3565b6200173b565b620002996200054836600462001f0a565b62001756565b620005656200055f36600462001f0a565b6200179c565b6040516200028692919062002a92565b620002bf62000586366004620020e4565b620017b5565b620002bf6200196f565b60168054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620006265780601f10620005fa5761010080835404028352916020019162000626565b820191906000526020600020905b8154815290600101906020018083116200060857829003601f168201915b505050505090505b90565b60125460ff1681565b33600090815260066020526040902054620006725760405162461bcd60e51b8152600401620006699062002b88565b60405180910390fd5b6200068560083363ffffffff62001a0616565b15620006a55760405162461bcd60e51b8152600401620006699062002b52565b80620006c55760405162461bcd60e51b8152600401620006699062002b9a565b6000908152600d60205260409020805460ff19166001179055565b600080620006ef848462001a24565b6000818152600c602090815260409182902054825163d6362e9760e01b815292519394506001600160a01b03169263d6362e97926004808201939291829003018186803b1580156200074057600080fd5b505afa15801562000755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200077b919081019062001f85565b9150505b92915050565b6000805b82811015620007df57600d6000858584818110620007a357fe5b602090810292909201358352508101919091526040016000205460ff16151560011415620007d65760019150506200077f565b60010162000789565b5060009392505050565b600c602052600090815260409020546001600160a01b031681565b600f5481565b816200082a5760405162461bcd60e51b8152600401620006699062002cde565b600062000838838362001a24565b9050620008458162001a59565b15620008655760405162461bcd60e51b8152600401620006699062002ad4565b604051620008739062001c66565b604051809103906000f08015801562000890573d6000803e3d6000fd5b506000828152600c60205260409081902080546001600160a01b0319166001600160a01b039390931692909217909155517f0a925273fd754a41a580f8214815d5ae8a37367f561b3bd9d91a96730a418a1790620008f2908590859062002d36565b60405180910390a1505050565b6015546001600160a01b031690565b60105481565b33600090815260066020526040902054620009435760405162461bcd60e51b8152600401620006699062002b88565b6200095660083363ffffffff62001a0616565b15620009765760405162461bcd60e51b8152600401620006699062002b52565b600e5460ff166200098357fe5b600e805460ff19169055565b6016805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801562000a195780601f10620009ed5761010080835404028352916020019162000a19565b820191906000526020600020905b815481529060010190602001808311620009fb57829003601f168201915b505050505081565b6001600160a01b038116600090815260066020526040812054158015906200077f575062000a5760088363ffffffff62001a0616565b1592915050565b62000a68620008ff565b336001600160a01b0382161462000a935760405162461bcd60e51b8152600401620006699062002bf4565b8262000ab35760405162461bcd60e51b8152600401620006699062002bbe565b62000abe8262001a76565b62000add5760405162461bcd60e51b8152600401620006699062002c72565b6000838152602081905260409020546001600160a01b03161562000b155760405162461bcd60e51b8152600401620006699062002cba565b6001600160a01b0382166000908152600160205260409020541562000b4e5760405162461bcd60e51b8152600401620006699062002c84565b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915583526001909152902083905562000b9260028362001a7c565b7f7051aac27f9b76ec8f37bd5796f2dcf402bd840a1c45c952a6eeb0e11bde09968383604051620008f292919062002d36565b62000bcf620008ff565b336001600160a01b0382161462000bfa5760405162461bcd60e51b8152600401620006699062002bf4565b815162000c0f90601690602085019062001c74565b505050565b3360009081526006602052604081205462000c435760405162461bcd60e51b8152600401620006699062002b88565b62000c5660083363ffffffff62001a0616565b1562000c765760405162461bcd60e51b8152600401620006699062002b52565b600062000c84888862001a24565b905062000c918162001a59565b62000cb05760405162461bcd60e51b8152600401620006699062002b40565b6000818152600c60205260408120546001600160a01b03169062000ce68862000cdf368a90038a018a62001f64565b8862001b22565b6040516390b5561d60e01b81529091506001600160a01b038316906390b5561d9062000d1790849060040162002d26565b600060405180830381600087803b15801562000d3257600080fd5b505af115801562000d47573d6000803e3d6000fd5b50505050600062000d5a828c8c62001b58565b6000818152600b60205260409020549091506001600160a01b03161562000d955760405162461bcd60e51b8152600401620006699062002b2e565b6000818152600b60205260409081902080546001600160a01b0319166001600160a01b03898116919091179091559051908816907fe15a4f223f922b625f5fdd941101a23fa0c097e522233d47a7cbea2167e927019062000df890859062002d26565b60405180910390a2509998505050505050505050565b601154600f54601054030190565b60009081526007602052604090205460ff1690565b6000908152602081905260409020546001600160a01b031690565b600d6020526000908152604090205460ff1681565b600e5461010090046001600160a01b031633811462000e945760405162461bcd60e51b8152600401620006699062002bf4565b60125460ff161562000eba5760405162461bcd60e51b8152600401620006699062002c06565b60128054600160ff19909116179055600e546040517fb8421a1acb5f1e701a4f11ecaad76fa438b3947e8dfd6960b6086130e68e0aed9162000f0c916101009091046001600160a01b03169062002a72565b60405180910390a150565b6001600160a01b031660009081526006602052604090205490565b6103e881565b60115481565b6000908152600560205260409020546001600160a01b031690565b600e5461010090046001600160a01b031633811462000f8c5760405162461bcd60e51b8152600401620006699062002bf4565b60125460ff16151560011462000fb65760405162461bcd60e51b8152600401620006699062002b1c565b60108054604080518082018252858152426020808301918252600085815260139091528390209151825551600191820155600f5484540190935560119290925590517f5a978f4723b249ccf79cd7a658a8601ce1ff8b89fc770251a6be35216351ce3290620008f290839062002d26565b33600090815260016020526040812054620010565760405162461bcd60e51b8152600401620006699062002c18565b6200106960023363ffffffff62001a0616565b15620010895760405162461bcd60e51b8152600401620006699062002ccc565b60125460ff161515600114620010b35760405162461bcd60e51b8152600401620006699062002b1c565b600f5460115410620010d95760405162461bcd60e51b8152600401620006699062002ca8565b6000620010e562000e0e565b60408051808201825294855242602080870191825260008481526013909152919091209451855551600194850155601180549094019093555090919050565b600e5461010090046001600160a01b031681565b60008062001147848462001a24565b90506200077b8162001a59565b600b602052600090815260409020546001600160a01b031681565b60145481565b600e5460ff16156200119b5760405162461bcd60e51b8152600401620006699062002c2a565b600e805460ff191660011790556000620011b6858562001a24565b9050620011c38162001a59565b620011e25760405162461bcd60e51b8152600401620006699062002c60565b6000818152600c6020908152604080832054815163bda1504b60e01b815291516001600160a01b039091169392849263bda1504b9260048083019392829003018186803b1580156200123357600080fd5b505afa15801562001248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200126e919081019062001f85565b116200128e5760405162461bcd60e51b8152600401620006699062002c96565b6000816001600160a01b031663d6362e976040518163ffffffff1660e01b815260040160206040518083038186803b158015620012ca57600080fd5b505afa158015620012df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062001305919081019062001f85565b9050600062001314826200062e565b90506001600160a01b03861615806200133e5750856001600160a01b0316816001600160a01b0316145b6200135d5760405162461bcd60e51b8152600401620006699062002bac565b60006200136c838a8a62001b58565b6000818152600b60205260408120549192506001600160a01b03909116905b8781108015620013ae575042620013a28662001b90565b67ffffffffffffffff16105b15620015ef576000838152600b6020908152604080832080546001600160a01b03191690558051632c1d5dab60e21b815290516001600160a01b038a169363b07576ac93600480850194919392918390030190829087803b1580156200141357600080fd5b505af115801562001428573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200144e919081019062001f85565b50604051636849635160e01b81526001909101906001600160a01b03831690636849635190620014879087908f908f9060040162002cf0565b600060405180830381600087803b158015620014a257600080fd5b505af1158015620014b7573d6000803e3d6000fd5b50505050856001600160a01b031663bda1504b6040518163ffffffff1660e01b815260040160206040518083038186803b158015620014f557600080fd5b505afa1580156200150a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062001530919081019062001f85565b6200153b57620015ef565b856001600160a01b031663d6362e976040518163ffffffff1660e01b815260040160206040518083038186803b1580156200157557600080fd5b505afa1580156200158a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620015b0919081019062001f85565b9450620015bf858c8c62001b58565b9250620015cc856200062e565b6000848152600b60205260409020549094506001600160a01b031691506200138b565b7f7e35599fe450e626673ce6c37179ef9820aed16f76c1b350618ef7a612d13005818c8c604051620016249392919062002d83565b60405180910390a15050600e5460ff16945062001642935050505057fe5b5050600e805460ff191690555050565b33600090815260066020526040902054620016815760405162461bcd60e51b8152600401620006699062002b88565b6200169460083363ffffffff62001a0616565b15620016b45760405162461bcd60e51b8152600401620006699062002b52565b60005b8181101562000c0f576000838383818110620016cf57fe5b905060200201351415620016f75760405162461bcd60e51b8152600401620006699062002b9a565b6001600d60008585858181106200170a57fe5b60209081029290920135835250810191909152604001600020805460ff1916911515919091179055600101620016b7565b6001600160a01b031660009081526001602052604090205490565b600081815260136020526040812060010154620017875760405162461bcd60e51b8152600401620006699062002ae6565b600f5482816200179357fe5b06151592915050565b6013602052600090815260409020805460019091015482565b620017bf620008ff565b336001600160a01b03821614620017ea5760405162461bcd60e51b8152600401620006699062002bf4565b836200180a5760405162461bcd60e51b8152600401620006699062002bd0565b620018158362001a76565b620018345760405162461bcd60e51b8152600401620006699062002c72565b6000848152600560205260409020546001600160a01b0316156200186c5760405162461bcd60e51b8152600401620006699062002c3c565b6001600160a01b03831660009081526006602052604090205415620018a55760405162461bcd60e51b8152600401620006699062002af8565b620018b08262001b96565b620018cf5760405162461bcd60e51b8152600401620006699062002b0a565b600084815260056020908152604080832080546001600160a01b0319166001600160a01b03881690811790915583526006825280832087905586835260079091529020805460ff191660ff84161790556200192c60088462001a7c565b7f0ceb02f7474c01f5959171cead2f5fb2a44d9c16fe480725a2110b601b19db82848484604051620019619392919062002d55565b60405180910390a150505050565b336000908152600660205260409020546200199e5760405162461bcd60e51b8152600401620006699062002b88565b620019b160083363ffffffff62001a0616565b15620019d15760405162461bcd60e51b8152600401620006699062002b52565b600e5460ff1615620019f75760405162461bcd60e51b8152600401620006699062002c2a565b600e805460ff19166001179055565b6001600160a01b031660009081526020919091526040902054421090565b6000828260405160200162001a3b92919062002a0b565b60405160208183030381529060405280519060200120905092915050565b6000908152600c60205260409020546001600160a01b0316151590565b3b151590565b6001600160a01b03811662001aa55760405162461bcd60e51b8152600401620006699062002be2565b6001600160a01b0381166000908152602083905260409020541562001ade5760405162461bcd60e51b8152600401620006699062002b64565b600282015462001b115760018201546001600160a01b038216600090815260208490526040902042909101905562001b1e565b6002820180546000190190555b5050565b6000816001600160a01b031660a062001b3b8562001bb0565b901b60d68667ffffffffffffffff16901b171790505b9392505050565b600083838360405160200162001b719392919062002a35565b6040516020818303038152906040528051906020012090509392505050565b60d61c90565b600060ff8216600114806200077f57505060ff1660021490565b600061271062001bc08362001bcf565b8162001bc857fe5b0492915050565b6000600161271003826040015161ffff16111562001c015760405162461bcd60e51b8152600401620006699062002b76565b81516429f16b11c667ffffffffffffffff909116111562001c365760405162461bcd60e51b8152600401620006699062002c4e565b5060408101516020820151825167ffffffffffffffff16633b9aca000261ffff9182166127100201911601919050565b61099e8062002f0683390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062001cb757805160ff191683800117855562001ce7565b8280016001018555821562001ce7579182015b8281111562001ce757825182559160200191906001019062001cca565b5062001cf592915062001cf9565b5090565b6200062e91905b8082111562001cf5576000815560010162001d00565b80356200077f8162002ea9565b60008083601f84011262001d3657600080fd5b50813567ffffffffffffffff81111562001d4f57600080fd5b60208301915083602082028301111562001d6857600080fd5b9250929050565b80356200077f8162002ec3565b80356200077f8162002ece565b600082601f83011262001d9b57600080fd5b813562001db262001dac8262002dcb565b62002da3565b9150808252602083016020830185838301111562001dcf57600080fd5b62001ddc83828462002e46565b50505092915050565b60006060828403121562001df857600080fd5b50919050565b60006060828403121562001e1157600080fd5b62001e1d606062002da3565b9050600062001e2d848462001e89565b825250602062001e408484830162001e62565b602083015250604062001e568482850162001e62565b60408301525092915050565b80356200077f8162002ed9565b80356200077f8162002ee4565b80516200077f8162002ec3565b80356200077f8162002eef565b80356200077f8162002efa565b60006020828403121562001eb657600080fd5b60006200077b848462001d16565b6000806020838503121562001ed857600080fd5b823567ffffffffffffffff81111562001ef057600080fd5b62001efe8582860162001d23565b92509250509250929050565b60006020828403121562001f1d57600080fd5b60006200077b848462001d6f565b60006020828403121562001f3e57600080fd5b813567ffffffffffffffff81111562001f5657600080fd5b6200077b8482850162001d89565b60006060828403121562001f7757600080fd5b60006200077b848462001dfe565b60006020828403121562001f9857600080fd5b60006200077b848462001e7c565b6000806040838503121562001fba57600080fd5b600062001fc8858562001d6f565b925050602062001fdb8582860162001d16565b9150509250929050565b6000806000806080858703121562001ffc57600080fd5b60006200200a878762001d6f565b94505060206200201d8782880162001d16565b9350506040620020308782880162001e6f565b9250506060620020438782880162001d6f565b91505092959194509250565b60008060008060008061010087890312156200206a57600080fd5b600062002078898962001d6f565b96505060206200208b89828a0162001d16565b95505060406200209e89828a0162001e89565b9450506060620020b189828a0162001de5565b93505060c0620020c489828a0162001e6f565b92505060e0620020d789828a0162001d7c565b9150509295509295509295565b600080600060608486031215620020fa57600080fd5b600062002108868662001d6f565b93505060206200211b8682870162001d16565b92505060406200212e8682870162001e96565b9150509250925092565b620021438162002e01565b82525050565b62002143620021588262002e01565b62002e85565b620021438162002e0e565b62002143816200062e565b620021438162002e13565b60006200218c8262002df4565b62002198818562002df8565b9350620021aa81856020860162002e52565b620021b58162002e99565b9093019392505050565b6000620021ce60118362002df8565b70457869742071756575652065786973747360781b815260200192915050565b6000620021fd60148362002df8565b73109b1bd8dac8191bd95cc81b9bdd08195e1a5cdd60621b815260200192915050565b60006200222f602c8362002df8565b7f54686520657869742067616d6520636f6e747261637420697320616c7265616481526b1e481c9959da5cdd195c995960a21b602082015260400192915050565b60006200227f60168362002df8565b75496e76616c69642070726f746f636f6c2076616c756560501b815260200192915050565b6000620022b3603b8362002df8565b7f4368696c6420636861696e20686173206e6f74206265656e206163746976617481527f656420627920617574686f726974792061646472657373207965740000000000602082015260400192915050565b60006200231460258362002df8565b7f5468652073616d65207072696f7269747920697320616c726561647920656e718152641d595d595960da1b602082015260400192915050565b60006200235d60508362002df8565b7f54686520717565756520666f722074686520287661756c7449642c20746f6b6581527f6e292070616972206973206e6f742079657420616464656420746f207468652060208201526f506c61736d61206672616d65776f726b60801b604082015260600192915050565b6000620023d760178362002df8565b7f4578697447616d652069732071756172616e74696e6564000000000000000000815260200192915050565b60006200241260238362002df8565b7f54686520636f6e747261637420697320616c72656164792071756172616e74698152621b995960ea1b602082015260400192915050565b60006200245960148362002df8565b73092dcecc2d8d2c840deeae8e0eae840d2dcc8caf60631b815260200192915050565b60006200248b60348362002df8565b7f5468652063616c6c206973206e6f742066726f6d2061207265676973746572658152731908195e1a5d0819d85b594818dbdb9d1c9858dd60621b602082015260400192915050565b6000620024e360238362002df8565b7f53686f756c64206e6f7420666c6167207769746820656d707479206f757470758152621d125960ea1b602082015260400192915050565b60006200252a603a8362002df8565b7f546f702065786974204944206f6620746865207175657565206973206469666681527f6572656e7420746f20746865206f6e6520737065636966696564000000000000602082015260400192915050565b60006200258b60238362002df8565b7f53686f756c64206e6f742072656769737465722077697468207661756c74204981526204420360ec1b602082015260400192915050565b6000620025d260228362002df8565b7f53686f756c64206e6f7420726567697374657220776974682074782074797065815261020360f41b602082015260400192915050565b60006200261860268362002df8565b7f416e20656d70747920616464726573732063616e6e6f742062652071756172618152651b9d1a5b995960d21b602082015260400192915050565b600062002662601e8362002df8565b7f43616c6c6572206164647265737320697320756e617574686f72697a65640000815260200192915050565b60006200269d601d8362002df8565b7f4368696c6420636861696e20616c726561647920616374697661746564000000815260200192915050565b6000620026d860278362002df8565b7f5468652063616c6c206973206e6f742066726f6d20612072656769737465726581526619081d985d5b1d60ca1b602082015260400192915050565b600062002723600e8362002df8565b6d1499595b9d1c985b9d0818d85b1b60921b815260200192915050565b60006200274f60218362002df8565b7f546865207478207479706520697320616c7265616479207265676973746572658152601960fa1b602082015260400192915050565b60006200279460148362002df8565b7324b73b30b634b210313637b1b590373ab6b132b960611b815260200192915050565b6000620027c660328362002df8565b7f54686520746f6b656e206973206e6f742079657420616464656420746f2074688152716520506c61736d61206672616d65776f726b60701b602082015260400192915050565b60006200281c602f8362002df8565b7f53686f756c64206e6f7420726567697374657220776974682061206e6f6e2d6381526e6f6e7472616374206164647265737360881b602082015260400192915050565b60006200286f60288362002df8565b7f546865207661756c7420636f6e747261637420697320616c726561647920726581526719da5cdd195c995960c21b602082015260400192915050565b6000620028bb60138362002df8565b724578697420717565756520697320656d70747960681b815260200192915050565b6000620028ec60338362002df8565b7f4578636565646564206c696d6974206f66206465706f736974732070657220638152721a1a5b1908189b1bd8dac81a5b9d195c9d985b606a1b602082015260400192915050565b60006200294360228362002df8565b7f546865207661756c7420494420697320616c7265616479207265676973746572815261195960f21b602082015260400192915050565b60006200298960148362002df8565b7315985d5b1d081a5cc81c5d585c985b9d1a5b995960621b815260200192915050565b6000620029bb60168362002df8565b7505661756c74204944206d757374206e6f7420626520360541b815260200192915050565b620021438162002e27565b62002143620029fa826200062e565b6200062e565b620021438162002e40565b600062002a198285620029eb565b60208201915062002a2b828462002149565b5060140192915050565b600062002a438286620029eb565b60208201915062002a558285620029eb565b60208201915062002a67828462002149565b506014019392505050565b602081016200077f828462002138565b602081016200077f82846200215e565b6040810162002aa2828562002169565b62001b51602083018462002169565b602081016200077f828462002174565b6020808252810162001b5181846200217f565b602080825281016200077f81620021bf565b602080825281016200077f81620021ee565b602080825281016200077f8162002220565b602080825281016200077f8162002270565b602080825281016200077f81620022a4565b602080825281016200077f8162002305565b602080825281016200077f816200234e565b602080825281016200077f81620023c8565b602080825281016200077f8162002403565b602080825281016200077f816200244a565b602080825281016200077f816200247c565b602080825281016200077f81620024d4565b602080825281016200077f816200251b565b602080825281016200077f816200257c565b602080825281016200077f81620025c3565b602080825281016200077f8162002609565b602080825281016200077f8162002653565b602080825281016200077f816200268e565b602080825281016200077f81620026c9565b602080825281016200077f8162002714565b602080825281016200077f8162002740565b602080825281016200077f8162002785565b602080825281016200077f81620027b7565b602080825281016200077f816200280d565b602080825281016200077f8162002860565b602080825281016200077f81620028ac565b602080825281016200077f81620028dd565b602080825281016200077f8162002934565b602080825281016200077f816200297a565b602080825281016200077f81620029ac565b6060810162002d008286620029e0565b62002d0f602083018562002169565b62002d1e604083018462002138565b949350505050565b602081016200077f828462002169565b6040810162002d46828562002169565b62001b51602083018462002138565b6060810162002d65828662002169565b62002d74602083018562002138565b62002d1e604083018462002a00565b6060810162002d00828662002169565b602081016200077f828462002a00565b60405181810167ffffffffffffffff8111828210171562002dc357600080fd5b604052919050565b600067ffffffffffffffff82111562002de357600080fd5b506020601f91909101601f19160190565b5190565b90815260200190565b60006200077f8262002e27565b151590565b60006200077f8262002e01565b61ffff1690565b6001600160a01b031690565b67ffffffffffffffff1690565b60ff1690565b82818337506000910152565b60005b8381101562002e6f57818101518382015260200162002e55565b8381111562002e7f576000848401525b50505050565b60006200077f8260006200077f8262002ea3565b601f01601f191690565b60601b90565b62002eb48162002e01565b811462002ec057600080fd5b50565b62002eb4816200062e565b62002eb48162002e13565b62002eb48162002e20565b62002eb48162002e27565b62002eb48162002e33565b62002eb48162002e4056fe608060405234801561001057600080fd5b506040805160208101909152600080825261002c916001610049565b506000600155600280546001600160a01b031916331790556100b6565b828054828255906000526020600020908101928215610089579160200282015b82811115610089578251829060ff16905591602001919060010190610069565b50610095929150610099565b5090565b6100b391905b80821115610095576000815560010161009f565b90565b6108d9806100c56000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bda1504b1161005b578063bda1504b14610113578063d6362e971461011b578063e10d29ee14610123578063e9de55531461012b5761007d565b8063446b2f881461008257806390b5561d146100da578063b07576ac146100f9575b600080fd5b61008a61014f565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156100c65781810151838201526020016100ae565b505050509050019250505060405180910390f35b6100f7600480360360208110156100f057600080fd5b50356101aa565b005b610101610263565b60408051918252519081900360200190f35b6101016103c5565b6101016103cb565b610101610432565b610133610438565b604080516001600160a01b039092168252519081900360200190f35b60606000800180548060200260200160405190810160405280929190818152602001828054801561019f57602002820191906000526020600020905b81548152602001906001019080831161018b575b505050505090505b90565b6002546001600160a01b031633811461020a576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206164647265737320697320756e617574686f72697a65640000604482015290519081900360640190fd5b60008054600181810183559180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56301839055805461024e9163ffffffff61044716565b600181905561025f906000906104aa565b5050565b6002546000906001600160a01b03163381146102c6576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206164647265737320697320756e617574686f72697a65640000604482015290519081900360640190fd5b60015461030b576040805162461bcd60e51b815260206004820152600e60248201526d517565756520697320656d70747960901b604482015290519081900360640190fd5b60008060000160018154811061031d57fe5b6000918252602082200154600154825491935090811061033957fe5b90600052602060002001546000800160018154811061035457fe5b60009182526020822001919091556001548154811061036f57fe5b60009182526020822001556001805461038d9163ffffffff61058016565b600190815561039e906000906105dd565b6000546103b290600163ffffffff61058016565b6103bd600082610840565b5091505b5090565b60015490565b600154600090610413576040805162461bcd60e51b815260206004820152600e60248201526d517565756520697320656d70747960901b604482015290519081900360640190fd5b60008054600190811061042257fe5b9060005260206000200154905090565b60015481565b6002546001600160a01b031681565b6000828201838110156104a1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b8154819081906000908590839081106104bf57fe5b906000526020600020015490505b846104df84600263ffffffff6106b416565b815481106104e957fe5b9060005260206000200154811015610555578461050d84600263ffffffff6106b416565b8154811061051757fe5b906000526020600020015485600001848154811061053157fe5b60009182526020909120015561054e83600263ffffffff6106b416565b92506104cd565b818314610579578085600001848154811061056c57fe5b6000918252602090912001555b5050505050565b6000828211156105d7576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b8154819081906000908590839081106105f257fe5b90600052602060002001549050600061060b868561071e565b90505b8560010154811115801561063a575085600001818154811061062c57fe5b906000526020600020015482115b156106885785600001818154811061064e57fe5b906000526020600020015486600001858154811061066857fe5b600091825260209091200155925082610681868261071e565b905061060e565b8284146106ac578186600001858154811061069f57fe5b6000918252602090912001555b505050505050565b600080821161070a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161071557fe5b04949350505050565b6001808301546000916107489061073c85600263ffffffff6107e716565b9063ffffffff61044716565b11156107665761075f82600263ffffffff6107e716565b90506104a4565b8261077d600161073c85600263ffffffff6107e716565b8154811061078757fe5b600091825260209091200154836107a584600263ffffffff6107e716565b815481106107af57fe5b906000526020600020015410156107d15761075f82600263ffffffff6107e716565b61075f600161073c84600263ffffffff6107e716565b6000826107f6575060006104a4565b8282028284828161080357fe5b04146104a15760405162461bcd60e51b81526004018080602001828103825260218152602001806108846021913960400191505060405180910390fd5b81548183558181111561086457600083815260209020610864918101908301610869565b505050565b6101a791905b808211156103c1576000815560010161086f56fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72315820c6d093e3cb861c2f3d7e0da0c41de597c3612f1688360db1a528767863989fe064736f6c634300050b0032a365627a7a7231582029fa75913584421d44582899a7748de9451b9a6ab336a09dce3dc63df0fe8fff6c6578706572696d656e74616cf564736f6c634300050b0040",
  "sourceMap": "212:2209:75:-;;;993:26:74;;;-1:-1:-1;;993:26:74;;;1434:450:75;5:2:-1;;;;30:1;27;20:12;5:2;1434:450:75;;;;;;;;;;;;;;;;;;;;;1101:1:80;:18;;1065:33;:54;1129:36;:59;;;1161:18:79;;;1122:36;:57;1189:39;:65;;;;1454:9:73;:22;;-1:-1:-1;;;;;;1454:22:73;;-1:-1:-1;;;;;1454:22:73;;;;;;;362:4:75;1486:18:73;:30;;;1526:14;:35;-1:-1:-1;1571:11:73;:15;1596:21;:29;;-1:-1:-1;;1596:29:73;;;1813:13:75;:30;;;;1853:10;:24;;-1:-1:-1;;;;;;1853:24:75;;;;;;;;;;;212:2209;;5:134:-1;83:13;;101:33;83:13;101:33;;;68:71;;;;;146:134;224:13;;242:33;224:13;242:33;;287:809;;;;;;470:3;458:9;449:7;445:23;441:33;438:2;;;487:1;484;477:12;438:2;522:1;539:64;595:7;575:9;539:64;;;529:74;;501:108;640:2;658:64;714:7;705:6;694:9;690:22;658:64;;;648:74;;619:109;759:2;777:64;833:7;824:6;813:9;809:22;777:64;;;767:74;;738:109;878:2;896:64;952:7;943:6;932:9;928:22;896:64;;;886:74;;857:109;997:3;1016:64;1072:7;1063:6;1052:9;1048:22;1016:64;;;1006:74;;976:110;432:664;;;;;;;;;1103:91;;-1:-1;;;;;1263:54;;1165:24;1246:76;1329:72;1391:5;1374:27;1408:117;1477:24;1495:5;1477:24;;;1470:5;1467:35;1457:2;;1516:1;1513;1506:12;1457:2;1451:74;;1532:117;1601:24;1619:5;1601:24;;1575:74;212:2209:75;;;;;;",
  "deployedSourceMap": "212:2209:75:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;212:2209:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2075:91;;;:::i;:::-;;;;;;;;;;;;;;;;972:33:73;;;:::i;:::-;;;;;;;;8431:222:74;;;;;;;;;:::i;:::-;;8659:186;;;;;;;;;:::i;:::-;;;;;;;;7585:287;;;;;;;;;:::i;854:53::-;;;;;;;;;:::i;:::-;;;;;;;;866:33:73;;;:::i;3014:330:74:-;;;;;;;;;:::i;1890:89:75:-;;;:::i;:::-;;;;;;;;905:29:73;;;:::i;2237:129:74:-;;;:::i;1406:21:75:-;;;:::i;2132:181:79:-;;;;;;;;;:::i;2018:657:80:-;;;;;;;;;:::i;2307:112:75:-;;;;;;;;;:::i;4463:938:74:-;;;;;;;;;:::i;4098:131:73:-;;;:::i;3609:107:79:-;;;;;;;;;:::i;:::-;;;;;;;;2769:105:80;;;;;;;;;:::i;937:50:74:-;;;;;;;;;:::i;2153:231:73:-;;;:::i;4019:127:79:-;;;;;;;;;:::i;315:51:75:-;;;:::i;940:26:73:-;;;:::i;3813:109:79:-;;;;;;;;;:::i;2733:507:73:-;;;;;;;;;:::i;3547:545::-;;;;;;;;;:::i;836:24::-;;;:::i;2629:174:74:-;;;;;;;;;:::i;745:54::-;;;;;;;;;:::i;1340:28:75:-;;;:::i;5942:1486:74:-;;;;;;;;;:::i;7987:321::-;;;;;;;;;:::i;2968:121:80:-;;;;;;;;;:::i;4235:196:73:-;;;;;;;;;:::i;1012:51::-;;;;;;;;;:::i;:::-;;;;;;;;;2718:803:79;;;;;;;;;:::i;1948:146:74:-;;;:::i;2075:91:75:-;2152:7;2145:14;;;;;;;;-1:-1:-1;;2145:14:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2120:13;;2145:14;;2152:7;;2145:14;;2152:7;2145:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2075:91;;:::o;972:33:73:-;;;;;;:::o;8431:222:74:-;1447:10:79;1429:29;;;;:17;:29;;;;;;1421:99;;;;-1:-1:-1;;;1421:99:79;;;;;;;;;;;;;;;;;1539:45;:19;1573:10;1539:45;:33;:45;:::i;:::-;1538:46;1530:82;;;;-1:-1:-1;;;1530:82:79;;;;;;;;;8537:24:74;8529:72;;;;-1:-1:-1;;;8529:72:74;;;;;;;;;8611:28;;;;:17;:28;;;;;:35;;-1:-1:-1;;8611:35:74;8642:4;8611:35;;;8431:222::o;8659:186::-;8735:7;8754:11;8768:28;8781:7;8790:5;8768:12;:28::i;:::-;8813:16;;;;:11;:16;;;;;;;;;;:25;;-1:-1:-1;;;8813:25:74;;;;8754:42;;-1:-1:-1;;;;;;8813:16:74;;:23;;:25;;;;;:16;:25;;;;;;:16;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;8813:25:74;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8813:25:74;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;8813:25:74;;;;;;;;;8806:32;;;8659:186;;;;;:::o;7585:287::-;7669:4;;7685:159;7702:21;;;7685:159;;;7748:17;:32;7766:10;;7777:1;7766:13;;;;;;;;;;;;;;;;7748:32;;-1:-1:-1;7748:32:74;;;;;;;;-1:-1:-1;7748:32:74;;;;:40;;:32;:40;7744:90;;;7815:4;7808:11;;;;;7744:90;7725:3;;7685:159;;;-1:-1:-1;7860:5:74;;7585:287;-1:-1:-1;;;7585:287:74:o;854:53::-;;;;;;;;;;;;-1:-1:-1;;;;;854:53:74;;:::o;866:33:73:-;;;;:::o;3014:330:74:-;3095:12;3087:47;;;;-1:-1:-1;;;3087:47:74;;;;;;;;;3144:11;3158:28;3171:7;3180:5;3158:12;:28::i;:::-;3144:42;;3205:17;3218:3;3205:12;:17::i;:::-;3204:18;3196:48;;;;-1:-1:-1;;;3196:48:74;;;;;;;;;3273:19;;;;;:::i;:::-;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;3254:16:74;;;;:11;:16;;;;;;;:38;;-1:-1:-1;;;;;;3254:38:74;-1:-1:-1;;;;;3254:38:74;;;;;;;;;;;3307:30;;;;;3322:7;;3331:5;;3307:30;;;;;;;;;;3014:330;;;:::o;1890:89:75:-;1962:10;;-1:-1:-1;;;;;1962:10:75;1890:89;:::o;905:29:73:-;;;;:::o;2237:129:74:-;1447:10:79;1429:29;;;;:17;:29;;;;;;1421:99;;;;-1:-1:-1;;;1421:99:79;;;;;;;;;1539:45;:19;1573:10;1539:45;:33;:45;:::i;:::-;1538:46;1530:82;;;;-1:-1:-1;;;1530:82:79;;;;;;;;;2330:5:74;;;;2323:13;;;;2346:5;:13;;-1:-1:-1;;2346:13:74;;;2237:129::o;1406:21:75:-;;;;;;;;;;;;;;;-1:-1:-1;;1406:21:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2132:181:79:-;-1:-1:-1;;;;;2224:28:79;;2201:4;2224:28;;;:17;:28;;;;;;:33;;;;:82;;-1:-1:-1;2262:44:79;:19;2296:9;2262:44;:33;:44;:::i;:::-;2261:45;2217:89;2132:181;-1:-1:-1;;2132:181:79:o;2018:657:80:-;2098:15;:13;:15::i;:::-;109:10:91;-1:-1:-1;;;;;109:20:91;;;101:63;;;;-1:-1:-1;;;101:63:91;;;;;;;;;2133:13:80;2125:61;;;;-1:-1:-1;;;2125:61:80;;;;;;;;;2204:33;2223:13;2204:18;:33::i;:::-;2196:93;;;;-1:-1:-1;;;2196:93:80;;;;;;;;;2336:1;2307:17;;;;;;;;;;;-1:-1:-1;;;;;2307:17:80;:31;2299:78;;;;-1:-1:-1;;;2299:78:80;;;;;;;;;-1:-1:-1;;;;;2395:25:80;;;;;;:10;:25;;;;;;:30;2387:83;;;;-1:-1:-1;;;2387:83:80;;;;;;;;;2481:7;:17;;;;;;;;;;;:33;;-1:-1:-1;;;;;;2481:33:80;-1:-1:-1;;;;;2481:33:80;;;;;;;;2524:25;;-1:-1:-1;2524:25:80;;;;;:36;;;2570:42;:16;2481:33;2570:27;:42::i;:::-;2628:40;2644:8;2654:13;2628:40;;;;;;;;2307:112:75;2367:15;:13;:15::i;:::-;109:10:91;-1:-1:-1;;;;;109:20:91;;;101:63;;;;-1:-1:-1;;;101:63:91;;;;;;;;;2394:18:75;;;;:7;;:18;;;;;:::i;:::-;;2307:112;;:::o;4463:938:74:-;1447:10:79;4736:7:74;1429:29:79;;;:17;:29;;;;;;1421:99;;;;-1:-1:-1;;;1421:99:79;;;;;;;;;1539:45;:19;1573:10;1539:45;:33;:45;:::i;:::-;1538:46;1530:82;;;;-1:-1:-1;;;1530:82:79;;;;;;;;;4759:11:74;4773:28;4786:7;4795:5;4773:12;:28::i;:::-;4759:42;;4819:17;4832:3;4819:12;:17::i;:::-;4811:110;;;;-1:-1:-1;;;4811:110:74;;;;;;;;;4931:19;4953:16;;;:11;:16;;;;;;-1:-1:-1;;;;;4953:16:74;;4999:55;5028:10;4999:55;;;;;;;5040:5;4999:55;;;5047:6;4999:28;:55::i;:::-;5065:22;;-1:-1:-1;;;5065:22:74;;4980:74;;-1:-1:-1;;;;;;5065:12:74;;;;;:22;;4980:74;;5065:22;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5065:22:74;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5065:22:74;;;;5098:21;5122:42;5139:8;5149:7;5158:5;5122:16;:42::i;:::-;5229:1;5190:26;;;:11;:26;;;;;;5098:66;;-1:-1:-1;;;;;;5190:26:74;5182:49;5174:99;;;;-1:-1:-1;;;5174:99:74;;;;;;;;;5283:26;;;;:11;:26;;;;;;;:42;;-1:-1:-1;;;;;;5283:42:74;-1:-1:-1;;;;;5283:42:74;;;;;;;;;;5341:28;;;;;;;;;;5360:8;;5341:28;;;;;;;;;;-1:-1:-1;5386:8:74;4463:938;-1:-1:-1;;;;;;;;;4463:938:74:o;4098:131:73:-;4211:11;;4190:18;;4173:14;;:35;:49;4098:131;:::o;3609:107:79:-;3666:5;3690:19;;;:10;:19;;;;;;;;;3609:107::o;2769:105:80:-;2824:7;2850:17;;;;;;;;;;;-1:-1:-1;;;;;2850:17:80;;2769:105::o;937:50:74:-;;;;;;;;;;;;;;;:::o;2153:231:73:-;2201:9;;;;;-1:-1:-1;;;;;2201:9:73;109:10:91;:20;;101:63;;;;-1:-1:-1;;;101:63:91;;;;;;;;;2230:21:73;;;;:30;2222:72;;;;-1:-1:-1;;;2222:72:73;;;;;;;;;2304:21;:28;;2328:4;-1:-1:-1;;2304:28:73;;;;;;2367:9;;2347:30;;;;;;2304:28;2367:9;;;-1:-1:-1;;;;;2367:9:73;;2347:30;;;;;;;;;;2153:231;:::o;4019:127:79:-;-1:-1:-1;;;;;4111:28:79;4085:7;4111:28;;;:17;:28;;;;;;;4019:127::o;315:51:75:-;362:4;315:51;:::o;940:26:73:-;;;;:::o;3813:109:79:-;3870:7;3896:19;;;:10;:19;;;;;;-1:-1:-1;;;;;3896:19:79;;3813:109::o;2733:507:73:-;2792:9;;;;;-1:-1:-1;;;;;2792:9:73;109:10:91;:20;;101:63;;;;-1:-1:-1;;;101:63:91;;;;;;;;;2821:21:73;;;;:29;;:21;:29;2813:101;;;;-1:-1:-1;;;2813:101:73;;;;;;;;;2955:14;;;3011:98;;;;;;;;;;;3083:15;3011:98;;;;;;;2924:28;2980;;;:6;:28;;;;;;:129;;;;;;;;;;3138:18;;3120:36;;;;;;3166:11;:15;;;;3197:36;;;;;;2955:14;;3197:36;;3547:545;1555:10:80;3639:7:73;1544:22:80;;;:10;:22;;;;;;1536:78;;;;-1:-1:-1;;;1536:78:80;;;;;;;;;1633:42;:16;1664:10;1633:42;:30;:42;:::i;:::-;1632:43;1624:76;;;;-1:-1:-1;;;1624:76:80;;;;;;;;;3666:21:73;;;;:29;;:21;:29;3658:101;;;;-1:-1:-1;;;3658:101:73;;;;;;;;;3791:18;;3777:11;;:32;3769:96;;;;-1:-1:-1;;;3769:96:73;;;;;;;;;3876:14;3893:18;:16;:18::i;:::-;3938:100;;;;;;;;;;;4012:15;3938:100;;;;;;;-1:-1:-1;3921:14:73;;;:6;:14;;;;;;;:117;;;;;;;;;;4049:11;:13;;;;;;;;-1:-1:-1;3921:14:73;;3547:545;-1:-1:-1;3547:545:73:o;836:24::-;;;;;;-1:-1:-1;;;;;836:24:73;;:::o;2629:174:74:-;2704:4;2720:11;2734:28;2747:7;2756:5;2734:12;:28::i;:::-;2720:42;;2779:17;2792:3;2779:12;:17::i;745:54::-;;;;;;;;;;;;-1:-1:-1;;;;;745:54:74;;:::o;1340:28:75:-;;;;:::o;5942:1486:74:-;1589:5;;;;1588:6;1580:33;;;;-1:-1:-1;;;1580:33:74;;;;;;;;;1623:5;:12;;-1:-1:-1;;1623:12:74;1631:4;1623:12;;;:5;6088:28;6101:7;6110:5;6088:12;:28::i;:::-;6074:42;;6134:17;6147:3;6134:12;:17::i;:::-;6126:80;;;;-1:-1:-1;;;6126:80:74;;;;;;;;;6216:19;6238:16;;;:11;:16;;;;;;;;;6272:19;;-1:-1:-1;;;6272:19:74;;;;-1:-1:-1;;;;;6238:16:74;;;;6216:19;6238:16;;6272:17;;:19;;;;;6238:16;6272:19;;;;;6238:16;6272:19;;;5:2:-1;;;;30:1;27;20:12;5:2;6272:19:74;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6272:19:74;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;6272:19:74;;;;;;;;;:23;6264:55;;;;-1:-1:-1;;;6264:55:74;;;;;;;;;6330:22;6355:5;-1:-1:-1;;;;;6355:12:74;;:14;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6355:14:74;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6355:14:74;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;6355:14:74;;;;;;;;;6330:39;;6379:14;6396:40;6421:14;6396:24;:40::i;:::-;6379:57;-1:-1:-1;;;;;;6454:14:74;;;;:37;;;6482:9;-1:-1:-1;;;;;6472:19:74;:6;-1:-1:-1;;;;;6472:19:74;;6454:37;6446:120;;;;-1:-1:-1;;;6446:120:74;;;;;;;;;6577:21;6601:48;6618:14;6634:7;6643:5;6601:16;:48::i;:::-;6659:24;6686:26;;;:11;:26;;;;;;6577:72;;-1:-1:-1;;;;;;6686:26:74;;;;6757:602;6779:17;6764:12;:32;:98;;;;;6847:15;6800:44;6829:14;6800:28;:44::i;:::-;:62;;;6764:98;6757:602;;;6885:26;;;;:11;:26;;;;;;;;6878:33;;-1:-1:-1;;;;;;6878:33:74;;;6925:14;;-1:-1:-1;;;6925:14:74;;;;-1:-1:-1;;;;;6925:12:74;;;;;:14;;;;;6885:26;;6925:14;;;;;;;;;:12;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;6925:14:74;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6925:14:74;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;6925:14:74;;;;;;;;;-1:-1:-1;6982:45:74;;-1:-1:-1;;;6982:45:74;;6953:14;;;;;-1:-1:-1;;;;;6982:21:74;;;;;:45;;7004:6;;7012:7;;7021:5;;6982:45;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6982:45:74;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6982:45:74;;;;7046:5;-1:-1:-1;;;;;7046:17:74;;:19;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7046:19:74;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7046:19:74;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;7046:19:74;;;;;;;;;7042:68;;7090:5;;7042:68;7141:5;-1:-1:-1;;;;;7141:12:74;;:14;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7141:14:74;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7141:14:74;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;7141:14:74;;;;;;;;;7124:31;;7185:48;7202:14;7218:7;7227:5;7185:16;:48::i;:::-;7169:64;;7256:40;7281:14;7256:24;:40::i;:::-;7322:26;;;;:11;:26;;;;;;7247:49;;-1:-1:-1;;;;;;7322:26:74;;-1:-1:-1;6757:602:74;;;7374:47;7392:12;7406:7;7415:5;7374:47;;;;;;;;;;;;;;;;;-1:-1:-1;;1663:5:74;;;;;-1:-1:-1;1656:13:74;;-1:-1:-1;;;;1656:13:74;;;-1:-1:-1;;1679:5:74;:13;;-1:-1:-1;;1679:13:74;;;-1:-1:-1;;5942:1486:74:o;7987:321::-;1447:10:79;1429:29;;;;:17;:29;;;;;;1421:99;;;;-1:-1:-1;;;1421:99:79;;;;;;;;;1539:45;:19;1573:10;1539:45;:33;:45;:::i;:::-;1538:46;1530:82;;;;-1:-1:-1;;;1530:82:79;;;;;;;;;8108:6:74;8103:199;8120:21;;;8103:199;;;8187:11;8170:10;;8181:1;8170:13;;;;;;;;;;;;;:28;;8162:76;;;;-1:-1:-1;;;8162:76:74;;;;;;;;;8287:4;8252:17;:32;8270:10;;8281:1;8270:13;;;;;;;;;;;;;;;;8252:32;;-1:-1:-1;8252:32:74;;;;;;;;-1:-1:-1;8252:32:74;:39;;-1:-1:-1;;8252:39:74;;;;;;;;;;-1:-1:-1;8143:3:74;8103:199;;2968:121:80;-1:-1:-1;;;;;3057:25:80;3031:7;3057:25;;;:10;:25;;;;;;;2968:121::o;4235:196:73:-;4293:4;4317:16;;;:6;:16;;;;;:26;;;4309:64;;;;-1:-1:-1;;;4309:64:73;;;;;;;;;4401:18;;4390:8;:29;;;;;;:34;;;4235:196;-1:-1:-1;;4235:196:73:o;1012:51::-;;;;;;;;;;;;;;;;;;;:::o;2718:803:79:-;2813:15;:13;:15::i;:::-;109:10:91;-1:-1:-1;;;;;109:20:91;;;101:63;;;;-1:-1:-1;;;101:63:91;;;;;;;;;2848:12:79;2840:59;;;;-1:-1:-1;;;2840:59:79;;;;;;;;;2917:29;2936:9;2917:18;:29::i;:::-;2909:89;;;;-1:-1:-1;;;2909:89:79;;;;;;;;;3047:1;3016:19;;;:10;:19;;;;;;-1:-1:-1;;;;;3016:19:79;:33;3008:79;;;;-1:-1:-1;;;3008:79:79;;;;;;;;;-1:-1:-1;;;;;3105:28:79;;;;;;:17;:28;;;;;;:33;3097:90;;;;-1:-1:-1;;;3097:90:79;;;;;;;;;3205:35;3230:9;3205:24;:35::i;:::-;3197:70;;;;-1:-1:-1;;;3197:70:79;;;;;;;;;3278:19;;;;:10;:19;;;;;;;;:31;;-1:-1:-1;;;;;;3278:31:79;-1:-1:-1;;;;;3278:31:79;;;;;;;;3319:28;;:17;:28;;;;;:38;;;3367:19;;;:10;:19;;;;;:31;;-1:-1:-1;;3367:31:79;;;;;;;3408:41;:19;3278:31;3408:30;:41::i;:::-;3465:49;3484:7;3493:9;3504;3465:49;;;;;;;;;;;;;;;;;2718:803;;;;:::o;1948:146:74:-;1447:10:79;1429:29;;;;:17;:29;;;;;;1421:99;;;;-1:-1:-1;;;1421:99:79;;;;;;;;;1539:45;:19;1573:10;1539:45;:33;:45;:::i;:::-;1538:46;1530:82;;;;-1:-1:-1;;;1530:82:79;;;;;;;;;2041:5:74;;;;2040:6;2032:33;;;;-1:-1:-1;;;2032:33:74;;;;;;;;;2075:5;:12;;-1:-1:-1;;2075:12:74;2083:4;2075:12;;;1948:146::o;496:169:83:-;-1:-1:-1;;;;;629:29:83;588:4;629:29;;;;;;;;;;;;611:15;:47;;496:169::o;8851:152:74:-;8927:7;8980;8989:5;8963:32;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;8963:32:74;;;8953:43;;;;;;8946:50;;8851:152;;;;:::o;9009:136::-;9071:4;9102:21;;;:11;:21;;;;;;-1:-1:-1;;;;;9102:21:74;9094:44;;;9009:136::o;542:413:113:-;902:20;940:8;;;542:413::o;795:466:83:-;-1:-1:-1;;;;;888:30:83;;880:81;;;;-1:-1:-1;;;880:81:83;;;;;;;;;-1:-1:-1;;;;;979:29:83;;:11;:29;;;;;;;;;;;:34;971:82;;;;-1:-1:-1;;;971:82:83;;;;;;;;;1068:25;;;;1064:191;;1164:22;;;;-1:-1:-1;;;;;1114:29:83;;:11;:29;;;;;;;;;;1146:15;:40;;;1114:72;;1064:191;;;1217:25;;;:27;;-1:-1:-1;;1217:27:83;;;1064:191;795:466;;:::o;1058:268:81:-;1195:7;1312:6;-1:-1:-1;;;;;1304:15:81;1297:3;1257:36;:5;:34;:36::i;:::-;:43;;1249:3;1234:10;1226:19;;:26;;1225:76;:94;1218:101;;1058:268;;;;;;:::o;9151:184:74:-;9249:7;9302:8;9312:7;9321:5;9285:42;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9285:42:74;;;9275:53;;;;;;9268:60;;9151:184;;;;;:::o;1332:121:81:-;1442:3;1430:15;;1332:121::o;474:144:76:-;538:4;561:21;;;137:1;561:21;;:50;;-1:-1:-1;;586:25:76;;184:1;586:25;;474:144::o;1403:166:93:-;1509:7;464:5;1539:11;1546:3;1539:6;:11::i;:::-;:23;;;;;;;1403:166;-1:-1:-1;;1403:166:93:o;1698:315::-;1758:7;537:1;464:5;525:13;1785:3;:15;;;:35;;;;1777:68;;;;-1:-1:-1;;;1777:68:93;;;;;;;;;1863:12;;805:59;1863:29;;;;;;1855:62;;;;-1:-1:-1;;;1855:62:93;;;;;;;;;-1:-1:-1;1991:15:93;;;;1965:11;;;;1935:12;;:27;;410:10;1935:27;:71;1965:23;;;464:5;1965:23;1935:53;:71;;;1698:315;;;:::o;212:2209:75:-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;212:2209:75;;;-1:-1:-1;212:2209:75;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;5:130:-1;72:20;;97:33;72:20;97:33;;160:352;;;290:3;283:4;275:6;271:17;267:27;257:2;;308:1;305;298:12;257:2;-1:-1;328:20;;368:18;357:30;;354:2;;;400:1;397;390:12;354:2;434:4;426:6;422:17;410:29;;485:3;477:4;469:6;465:17;455:8;451:32;448:41;445:2;;;502:1;499;492:12;445:2;250:262;;;;;;520:130;587:20;;612:33;587:20;612:33;;657:178;748:20;;773:57;748:20;773:57;;843:442;;945:3;938:4;930:6;926:17;922:27;912:2;;963:1;960;953:12;912:2;1000:6;987:20;1022:65;1037:49;1079:6;1037:49;;;1022:65;;;1013:74;;1107:6;1100:5;1093:21;1143:4;1135:6;1131:17;1176:4;1169:5;1165:16;1211:3;1202:6;1197:3;1193:16;1190:25;1187:2;;;1228:1;1225;1218:12;1187:2;1238:41;1272:6;1267:3;1262;1238:41;;;905:380;;;;;;;;1324:160;;1437:2;1428:6;1423:3;1419:16;1415:25;1412:2;;;1453:1;1450;1443:12;1412:2;-1:-1;1472:6;1405:79;-1:-1;1405:79;1520:623;;1636:4;1624:9;1619:3;1615:19;1611:30;1608:2;;;1654:1;1651;1644:12;1608:2;1672:20;1687:4;1672:20;;;1663:29;-1:-1;1746:1;1777:48;1821:3;1801:9;1777:48;;;1753:73;;-1:-1;1890:2;1923:48;1967:3;1943:22;;;1923:48;;;1916:4;1909:5;1905:16;1898:74;1847:136;2040:2;2073:48;2117:3;2108:6;2097:9;2093:22;2073:48;;;2066:4;2059:5;2055:16;2048:74;1993:140;1602:541;;;;;2150:128;2216:20;;2241:32;2216:20;2241:32;;2285:130;2352:20;;2377:33;2352:20;2377:33;;2559:134;2637:13;;2655:33;2637:13;2655:33;;2700:128;2766:20;;2791:32;2766:20;2791:32;;2835:126;2900:20;;2925:31;2900:20;2925:31;;2968:241;;3072:2;3060:9;3051:7;3047:23;3043:32;3040:2;;;3088:1;3085;3078:12;3040:2;3123:1;3140:53;3185:7;3165:9;3140:53;;3216:397;;;3355:2;3343:9;3334:7;3330:23;3326:32;3323:2;;;3371:1;3368;3361:12;3323:2;3406:31;;3457:18;3446:30;;3443:2;;;3489:1;3486;3479:12;3443:2;3517:80;3589:7;3580:6;3569:9;3565:22;3517:80;;;3507:90;;;;3385:218;3317:296;;;;;;3620:241;;3724:2;3712:9;3703:7;3699:23;3695:32;3692:2;;;3740:1;3737;3730:12;3692:2;3775:1;3792:53;3837:7;3817:9;3792:53;;3868:347;;3982:2;3970:9;3961:7;3957:23;3953:32;3950:2;;;3998:1;3995;3988:12;3950:2;4033:31;;4084:18;4073:30;;4070:2;;;4116:1;4113;4106:12;4070:2;4136:63;4191:7;4182:6;4171:9;4167:22;4136:63;;4222:295;;4353:2;4341:9;4332:7;4328:23;4324:32;4321:2;;;4369:1;4366;4359:12;4321:2;4404:1;4421:80;4493:7;4473:9;4421:80;;4772:263;;4887:2;4875:9;4866:7;4862:23;4858:32;4855:2;;;4903:1;4900;4893:12;4855:2;4938:1;4955:64;5011:7;4991:9;4955:64;;5042:366;;;5163:2;5151:9;5142:7;5138:23;5134:32;5131:2;;;5179:1;5176;5169:12;5131:2;5214:1;5231:53;5276:7;5256:9;5231:53;;;5221:63;;5193:97;5321:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;;;5329:63;;5300:98;5125:283;;;;;;5415:617;;;;;5570:3;5558:9;5549:7;5545:23;5541:33;5538:2;;;5587:1;5584;5577:12;5538:2;5622:1;5639:53;5684:7;5664:9;5639:53;;;5629:63;;5601:97;5729:2;5747:53;5792:7;5783:6;5772:9;5768:22;5747:53;;;5737:63;;5708:98;5837:2;5855:53;5900:7;5891:6;5880:9;5876:22;5855:53;;;5845:63;;5816:98;5945:2;5963:53;6008:7;5999:6;5988:9;5984:22;5963:53;;;5953:63;;5924:98;5532:500;;;;;;;;6039:973;;;;;;;6280:3;6268:9;6259:7;6255:23;6251:33;6248:2;;;6297:1;6294;6287:12;6248:2;6332:1;6349:53;6394:7;6374:9;6349:53;;;6339:63;;6311:97;6439:2;6457:53;6502:7;6493:6;6482:9;6478:22;6457:53;;;6447:63;;6418:98;6547:2;6565:52;6609:7;6600:6;6589:9;6585:22;6565:52;;;6555:62;;6526:97;6654:2;6672:82;6746:7;6737:6;6726:9;6722:22;6672:82;;;6662:92;;6633:127;6791:3;6810:53;6855:7;6846:6;6835:9;6831:22;6810:53;;;6800:63;;6770:99;6900:3;6919:77;6988:7;6979:6;6968:9;6964:22;6919:77;;;6909:87;;6879:123;6242:770;;;;;;;;;7019:487;;;;7155:2;7143:9;7134:7;7130:23;7126:32;7123:2;;;7171:1;7168;7161:12;7123:2;7206:1;7223:53;7268:7;7248:9;7223:53;;;7213:63;;7185:97;7313:2;7331:53;7376:7;7367:6;7356:9;7352:22;7331:53;;;7321:63;;7292:98;7421:2;7439:51;7482:7;7473:6;7462:9;7458:22;7439:51;;;7429:61;;7400:96;7117:389;;;;;;7513:113;7596:24;7614:5;7596:24;;;7591:3;7584:37;7578:48;;;7633:152;7734:45;7754:24;7772:5;7754:24;;;7734:45;;7792:104;7869:21;7884:5;7869:21;;7903:113;7986:24;8004:5;7986:24;;8023:174;8130:61;8185:5;8130:61;;8383:347;;8495:39;8528:5;8495:39;;;8546:71;8610:6;8605:3;8546:71;;;8539:78;;8622:52;8667:6;8662:3;8655:4;8648:5;8644:16;8622:52;;;8695:29;8717:6;8695:29;;;8686:39;;;;8475:255;-1:-1;;;8475:255;9084:364;;9244:67;9308:2;9303:3;9244:67;;;-1:-1;;;9324:87;;9439:2;9430:12;;9230:218;-1:-1;;9230:218;9457:364;;9617:67;9681:2;9676:3;9617:67;;;-1:-1;;;9697:87;;9812:2;9803:12;;9603:218;-1:-1;;9603:218;9830:465;;9990:67;10054:2;10049:3;9990:67;;;10090:66;10070:87;;-1:-1;;;10186:2;10177:12;;10170:88;10286:2;10277:12;;9976:319;-1:-1;;9976:319;10304:364;;10464:67;10528:2;10523:3;10464:67;;;-1:-1;;;10544:87;;10659:2;10650:12;;10450:218;-1:-1;;10450:218;10677:465;;10837:67;10901:2;10896:3;10837:67;;;10937:66;10917:87;;11038:66;11033:2;11024:12;;11017:88;11133:2;11124:12;;10823:319;-1:-1;;10823:319;11151:465;;11311:67;11375:2;11370:3;11311:67;;;11411:66;11391:87;;-1:-1;;;11507:2;11498:12;;11491:88;11607:2;11598:12;;11297:319;-1:-1;;11297:319;11625:566;;11785:67;11849:2;11844:3;11785:67;;;11885:66;11865:87;;11986:66;11981:2;11972:12;;11965:88;-1:-1;;;12082:2;12073:12;;12066:88;12182:2;12173:12;;11771:420;-1:-1;;11771:420;12200:364;;12360:67;12424:2;12419:3;12360:67;;;12460:66;12440:87;;12555:2;12546:12;;12346:218;-1:-1;;12346:218;12573:465;;12733:67;12797:2;12792:3;12733:67;;;12833:66;12813:87;;-1:-1;;;12929:2;12920:12;;12913:88;13029:2;13020:12;;12719:319;-1:-1;;12719:319;13047:364;;13207:67;13271:2;13266:3;13207:67;;;-1:-1;;;13287:87;;13402:2;13393:12;;13193:218;-1:-1;;13193:218;13420:465;;13580:67;13644:2;13639:3;13580:67;;;13680:66;13660:87;;-1:-1;;;13776:2;13767:12;;13760:88;13876:2;13867:12;;13566:319;-1:-1;;13566:319;13894:465;;14054:67;14118:2;14113:3;14054:67;;;14154:66;14134:87;;-1:-1;;;14250:2;14241:12;;14234:88;14350:2;14341:12;;14040:319;-1:-1;;14040:319;14368:465;;14528:67;14592:2;14587:3;14528:67;;;14628:66;14608:87;;14729:66;14724:2;14715:12;;14708:88;14824:2;14815:12;;14514:319;-1:-1;;14514:319;14842:465;;15002:67;15066:2;15061:3;15002:67;;;15102:66;15082:87;;-1:-1;;;15198:2;15189:12;;15182:88;15298:2;15289:12;;14988:319;-1:-1;;14988:319;15316:465;;15476:67;15540:2;15535:3;15476:67;;;15576:66;15556:87;;-1:-1;;;15672:2;15663:12;;15656:88;15772:2;15763:12;;15462:319;-1:-1;;15462:319;15790:465;;15950:67;16014:2;16009:3;15950:67;;;16050:66;16030:87;;-1:-1;;;16146:2;16137:12;;16130:88;16246:2;16237:12;;15936:319;-1:-1;;15936:319;16264:364;;16424:67;16488:2;16483:3;16424:67;;;16524:66;16504:87;;16619:2;16610:12;;16410:218;-1:-1;;16410:218;16637:364;;16797:67;16861:2;16856:3;16797:67;;;16897:66;16877:87;;16992:2;16983:12;;16783:218;-1:-1;;16783:218;17010:465;;17170:67;17234:2;17229:3;17170:67;;;17270:66;17250:87;;-1:-1;;;17366:2;17357:12;;17350:88;17466:2;17457:12;;17156:319;-1:-1;;17156:319;17484:364;;17644:67;17708:2;17703:3;17644:67;;;-1:-1;;;17724:87;;17839:2;17830:12;;17630:218;-1:-1;;17630:218;17857:465;;18017:67;18081:2;18076:3;18017:67;;;18117:66;18097:87;;-1:-1;;;18213:2;18204:12;;18197:88;18313:2;18304:12;;18003:319;-1:-1;;18003:319;18331:364;;18491:67;18555:2;18550:3;18491:67;;;-1:-1;;;18571:87;;18686:2;18677:12;;18477:218;-1:-1;;18477:218;18704:465;;18864:67;18928:2;18923:3;18864:67;;;18964:66;18944:87;;-1:-1;;;19060:2;19051:12;;19044:88;19160:2;19151:12;;18850:319;-1:-1;;18850:319;19178:465;;19338:67;19402:2;19397:3;19338:67;;;19438:66;19418:87;;-1:-1;;;19534:2;19525:12;;19518:88;19634:2;19625:12;;19324:319;-1:-1;;19324:319;19652:465;;19812:67;19876:2;19871:3;19812:67;;;19912:66;19892:87;;-1:-1;;;20008:2;19999:12;;19992:88;20108:2;20099:12;;19798:319;-1:-1;;19798:319;20126:364;;20286:67;20350:2;20345:3;20286:67;;;-1:-1;;;20366:87;;20481:2;20472:12;;20272:218;-1:-1;;20272:218;20499:465;;20659:67;20723:2;20718:3;20659:67;;;20759:66;20739:87;;-1:-1;;;20855:2;20846:12;;20839:88;20955:2;20946:12;;20645:319;-1:-1;;20645:319;20973:465;;21133:67;21197:2;21192:3;21133:67;;;21233:66;21213:87;;-1:-1;;;21329:2;21320:12;;21313:88;21429:2;21420:12;;21119:319;-1:-1;;21119:319;21447:364;;21607:67;21671:2;21666:3;21607:67;;;-1:-1;;;21687:87;;21802:2;21793:12;;21593:218;-1:-1;;21593:218;21820:364;;21980:67;22044:2;22039:3;21980:67;;;-1:-1;;;22060:87;;22175:2;22166:12;;21966:218;-1:-1;;21966:218;22192:113;22275:24;22293:5;22275:24;;22432:152;22533:45;22553:24;22571:5;22553:24;;;22533:45;;22591:107;22670:22;22686:5;22670:22;;22705:383;;22852:75;22923:3;22914:6;22852:75;;;22949:2;22944:3;22940:12;22933:19;;22963:75;23034:3;23025:6;22963:75;;;-1:-1;23060:2;23051:12;;22840:248;-1:-1;;22840:248;23095:522;;23270:75;23341:3;23332:6;23270:75;;;23367:2;23362:3;23358:12;23351:19;;23381:75;23452:3;23443:6;23381:75;;;23478:2;23473:3;23469:12;23462:19;;23492:75;23563:3;23554:6;23492:75;;;-1:-1;23589:2;23580:12;;23258:359;-1:-1;;;23258:359;23624:213;23742:2;23727:18;;23756:71;23731:9;23800:6;23756:71;;23844:201;23956:2;23941:18;;23970:65;23945:9;24008:6;23970:65;;24052:324;24198:2;24183:18;;24212:71;24187:9;24256:6;24212:71;;;24294:72;24362:2;24351:9;24347:18;24338:6;24294:72;;24383:261;24525:2;24510:18;;24539:95;24514:9;24607:6;24539:95;;24917:293;25051:2;25065:47;;;25036:18;;25126:74;25036:18;25186:6;25126:74;;25525:407;25716:2;25730:47;;;25701:18;;25791:131;25701:18;25791:131;;25939:407;26130:2;26144:47;;;26115:18;;26205:131;26115:18;26205:131;;26353:407;26544:2;26558:47;;;26529:18;;26619:131;26529:18;26619:131;;26767:407;26958:2;26972:47;;;26943:18;;27033:131;26943:18;27033:131;;27181:407;27372:2;27386:47;;;27357:18;;27447:131;27357:18;27447:131;;27595:407;27786:2;27800:47;;;27771:18;;27861:131;27771:18;27861:131;;28009:407;28200:2;28214:47;;;28185:18;;28275:131;28185:18;28275:131;;28423:407;28614:2;28628:47;;;28599:18;;28689:131;28599:18;28689:131;;28837:407;29028:2;29042:47;;;29013:18;;29103:131;29013:18;29103:131;;29251:407;29442:2;29456:47;;;29427:18;;29517:131;29427:18;29517:131;;29665:407;29856:2;29870:47;;;29841:18;;29931:131;29841:18;29931:131;;30079:407;30270:2;30284:47;;;30255:18;;30345:131;30255:18;30345:131;;30493:407;30684:2;30698:47;;;30669:18;;30759:131;30669:18;30759:131;;30907:407;31098:2;31112:47;;;31083:18;;31173:131;31083:18;31173:131;;31321:407;31512:2;31526:47;;;31497:18;;31587:131;31497:18;31587:131;;31735:407;31926:2;31940:47;;;31911:18;;32001:131;31911:18;32001:131;;32149:407;32340:2;32354:47;;;32325:18;;32415:131;32325:18;32415:131;;32563:407;32754:2;32768:47;;;32739:18;;32829:131;32739:18;32829:131;;32977:407;33168:2;33182:47;;;33153:18;;33243:131;33153:18;33243:131;;33391:407;33582:2;33596:47;;;33567:18;;33657:131;33567:18;33657:131;;33805:407;33996:2;34010:47;;;33981:18;;34071:131;33981:18;34071:131;;34219:407;34410:2;34424:47;;;34395:18;;34485:131;34395:18;34485:131;;34633:407;34824:2;34838:47;;;34809:18;;34899:131;34809:18;34899:131;;35047:407;35238:2;35252:47;;;35223:18;;35313:131;35223:18;35313:131;;35461:407;35652:2;35666:47;;;35637:18;;35727:131;35637:18;35727:131;;35875:407;36066:2;36080:47;;;36051:18;;36141:131;36051:18;36141:131;;36289:407;36480:2;36494:47;;;36465:18;;36555:131;36465:18;36555:131;;36703:407;36894:2;36908:47;;;36879:18;;36969:131;36879:18;36969:131;;37117:407;37308:2;37322:47;;;37293:18;;37383:131;37293:18;37383:131;;37531:407;37722:2;37736:47;;;37707:18;;37797:131;37707:18;37797:131;;37945:435;38119:2;38104:18;;38133:71;38108:9;38177:6;38133:71;;;38215:72;38283:2;38272:9;38268:18;38259:6;38215:72;;;38298;38366:2;38355:9;38351:18;38342:6;38298:72;;;38090:290;;;;;;;38387:213;38505:2;38490:18;;38519:71;38494:9;38563:6;38519:71;;38607:324;38753:2;38738:18;;38767:71;38742:9;38811:6;38767:71;;;38849:72;38917:2;38906:9;38902:18;38893:6;38849:72;;38938:427;39108:2;39093:18;;39122:71;39097:9;39166:6;39122:71;;;39204:72;39272:2;39261:9;39257:18;39248:6;39204:72;;;39287:68;39351:2;39340:9;39336:18;39327:6;39287:68;;39372:435;39546:2;39531:18;;39560:71;39535:9;39604:6;39560:71;;39814:205;39928:2;39913:18;;39942:67;39917:9;39982:6;39942:67;;40026:256;40088:2;40082:9;40114:17;;;40189:18;40174:34;;40210:22;;;40171:62;40168:2;;;40246:1;40243;40236:12;40168:2;40262;40255:22;40066:216;;-1:-1;40066:216;40289:322;;40433:18;40425:6;40422:30;40419:2;;;40465:1;40462;40455:12;40419:2;-1:-1;40596:4;40532;40509:17;;;;-1:-1;;40505:33;40586:15;;40356:255;40618:118;40702:12;;40673:63;40873:163;40976:19;;;41025:4;41016:14;;40969:67;41044:91;;41106:24;41124:5;41106:24;;41142:85;41208:13;41201:21;;41184:43;41313:115;;41399:24;41417:5;41399:24;;41435:84;41507:6;41496:18;;41479:40;41526:121;-1:-1;;;;;41588:54;;41571:76;41733:96;41805:18;41794:30;;41777:52;41836:81;41907:4;41896:16;;41879:38;42552:145;42633:6;42628:3;42623;42610:30;-1:-1;42689:1;42671:16;;42664:27;42603:94;42706:268;42771:1;42778:101;42792:6;42789:1;42786:13;42778:101;;;42859:11;;;42853:18;42840:11;;;42833:39;42814:2;42807:10;42778:101;;;42894:6;42891:1;42888:13;42885:2;;;42959:1;42950:6;42945:3;42941:16;42934:27;42885:2;42755:219;;;;;42982:95;;43046:26;43066:5;43084:89;43148:20;43162:5;43148:20;;43261:97;43349:2;43329:14;-1:-1;;43325:28;;43309:49;43366:94;43440:2;43436:14;;43408:52;43468:117;43537:24;43555:5;43537:24;;;43530:5;43527:35;43517:2;;43576:1;43573;43566:12;43517:2;43511:74;;43592:117;43661:24;43679:5;43661:24;;43716:165;43809:48;43851:5;43809:48;;43888:115;43956:23;43973:5;43956:23;;44010:117;44079:24;44097:5;44079:24;;44258:115;44326:23;44343:5;44326:23;;44380:113;44447:22;44463:5;44447:22;",
  "source": "pragma solidity 0.5.11;\npragma experimental ABIEncoderV2;\n\nimport \"./BlockController.sol\";\nimport \"./ExitGameController.sol\";\nimport \"./registries/VaultRegistry.sol\";\nimport \"./registries/ExitGameRegistry.sol\";\n\ncontract PlasmaFramework is VaultRegistry, ExitGameRegistry, ExitGameController, BlockController {\n    uint256 public constant CHILD_BLOCK_INTERVAL = 1000;\n\n    /**\n     * The minimum finalization period is the Plasma guarantee that all exits are safe provided the user takes action within the specified time period\n     * When the child chain is rogue, user should start their exit and challenge any invalid exit within this period\n     * An exit can be processed/finalized after minimum two finalization periods from its inclusion position, unless it is an exit for a deposit,\n     * which would use one finalization period, instead of two\n     *\n     * For the Abstract Layer Design, OmiseGO also uses some multitude of this period to update its framework\n     * See also ExitGameRegistry.sol, VaultRegistry.sol, and Vault.sol for more information on the update waiting time (the quarantined period)\n     *\n     * MVP: https://ethresear.ch/t/minimal-viable-plasma/426\n     * MoreVP: https://github.com/omisego/elixir-omg/blob/master/docs/morevp.md#timeline\n     * Special period for deposit: https://git.io/JecCV\n     */\n    uint256 public minExitPeriod;\n    address private maintainer;\n    string public version;\n\n    constructor(\n        uint256 _minExitPeriod,\n        uint256 _initialImmuneVaults,\n        uint256 _initialImmuneExitGames,\n        address _authority,\n        address _maintainer\n    )\n        public\n        BlockController(CHILD_BLOCK_INTERVAL, _minExitPeriod, _initialImmuneVaults, _authority)\n        ExitGameController(_minExitPeriod, _initialImmuneExitGames)\n    {\n        minExitPeriod = _minExitPeriod;\n        maintainer = _maintainer;\n    }\n\n    function getMaintainer() public view returns (address) {\n        return maintainer;\n    }\n\n    /**\n     * @notice Gets the semantic version of the current deployed contracts\n    */\n    function getVersion() external view returns (string memory) {\n        return version;\n    }\n    \n    /**\n     * @notice Sets the semantic version of the current deployed contracts\n     * @param _version is semver string\n     */\n    function setVersion(string memory _version) public onlyFrom(getMaintainer()) {\n        version = _version;\n    }\n}",
  "sourcePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/PlasmaFramework.sol",
  "ast": {
    "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/PlasmaFramework.sol",
    "exportedSymbols": {
      "PlasmaFramework": [
        12152
      ]
    },
    "id": 12153,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 12067,
        "literals": [
          "solidity",
          "0.5",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:75"
      },
      {
        "id": 12068,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "24:33:75"
      },
      {
        "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/BlockController.sol",
        "file": "./BlockController.sol",
        "id": 12069,
        "nodeType": "ImportDirective",
        "scope": 12153,
        "sourceUnit": 11464,
        "src": "59:31:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/ExitGameController.sol",
        "file": "./ExitGameController.sol",
        "id": 12070,
        "nodeType": "ImportDirective",
        "scope": 12153,
        "sourceUnit": 12066,
        "src": "91:34:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/registries/VaultRegistry.sol",
        "file": "./registries/VaultRegistry.sol",
        "id": 12071,
        "nodeType": "ImportDirective",
        "scope": 12153,
        "sourceUnit": 12614,
        "src": "126:40:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/registries/ExitGameRegistry.sol",
        "file": "./registries/ExitGameRegistry.sol",
        "id": 12072,
        "nodeType": "ImportDirective",
        "scope": 12153,
        "sourceUnit": 12442,
        "src": "167:43:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12073,
              "name": "VaultRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12613,
              "src": "240:13:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_VaultRegistry_$12613",
                "typeString": "contract VaultRegistry"
              }
            },
            "id": 12074,
            "nodeType": "InheritanceSpecifier",
            "src": "240:13:75"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12075,
              "name": "ExitGameRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12441,
              "src": "255:16:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ExitGameRegistry_$12441",
                "typeString": "contract ExitGameRegistry"
              }
            },
            "id": 12076,
            "nodeType": "InheritanceSpecifier",
            "src": "255:16:75"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12077,
              "name": "ExitGameController",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12065,
              "src": "273:18:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ExitGameController_$12065",
                "typeString": "contract ExitGameController"
              }
            },
            "id": 12078,
            "nodeType": "InheritanceSpecifier",
            "src": "273:18:75"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12079,
              "name": "BlockController",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11463,
              "src": "293:15:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BlockController_$11463",
                "typeString": "contract BlockController"
              }
            },
            "id": 12080,
            "nodeType": "InheritanceSpecifier",
            "src": "293:15:75"
          }
        ],
        "contractDependencies": [
          11463,
          12065,
          12441,
          12613,
          14291
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 12152,
        "linearizedBaseContracts": [
          12152,
          11463,
          12065,
          12441,
          12613,
          14291
        ],
        "name": "PlasmaFramework",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 12083,
            "name": "CHILD_BLOCK_INTERVAL",
            "nodeType": "VariableDeclaration",
            "scope": 12152,
            "src": "315:51:75",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 12081,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "315:7:75",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31303030",
              "id": 12082,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "362:4:75",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000_by_1",
                "typeString": "int_const 1000"
              },
              "value": "1000"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12085,
            "name": "minExitPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 12152,
            "src": "1340:28:75",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 12084,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1340:7:75",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12087,
            "name": "maintainer",
            "nodeType": "VariableDeclaration",
            "scope": 12152,
            "src": "1374:26:75",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 12086,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1374:7:75",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 12089,
            "name": "version",
            "nodeType": "VariableDeclaration",
            "scope": 12152,
            "src": "1406:21:75",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 12088,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1406:6:75",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12120,
              "nodeType": "Block",
              "src": "1803:81:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 12112,
                      "name": "minExitPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12085,
                      "src": "1813:13:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 12113,
                      "name": "_minExitPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12091,
                      "src": "1829:14:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1813:30:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12115,
                  "nodeType": "ExpressionStatement",
                  "src": "1813:30:75"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 12116,
                      "name": "maintainer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12087,
                      "src": "1853:10:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 12117,
                      "name": "_maintainer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12099,
                      "src": "1866:11:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1853:24:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 12119,
                  "nodeType": "ExpressionStatement",
                  "src": "1853:24:75"
                }
              ]
            },
            "documentation": null,
            "id": 12121,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 12102,
                    "name": "CHILD_BLOCK_INTERVAL",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12083,
                    "src": "1659:20:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 12103,
                    "name": "_minExitPeriod",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12091,
                    "src": "1681:14:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 12104,
                    "name": "_initialImmuneVaults",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12093,
                    "src": "1697:20:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 12105,
                    "name": "_authority",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12097,
                    "src": "1719:10:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 12106,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12101,
                  "name": "BlockController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11463,
                  "src": "1643:15:75",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_BlockController_$11463_$",
                    "typeString": "type(contract BlockController)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1643:87:75"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 12108,
                    "name": "_minExitPeriod",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12091,
                    "src": "1758:14:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 12109,
                    "name": "_initialImmuneExitGames",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12095,
                    "src": "1774:23:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 12110,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12107,
                  "name": "ExitGameController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12065,
                  "src": "1739:18:75",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ExitGameController_$12065_$",
                    "typeString": "type(contract ExitGameController)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1739:59:75"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12100,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12091,
                  "name": "_minExitPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 12121,
                  "src": "1455:22:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12090,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1455:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12093,
                  "name": "_initialImmuneVaults",
                  "nodeType": "VariableDeclaration",
                  "scope": 12121,
                  "src": "1487:28:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12092,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1487:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12095,
                  "name": "_initialImmuneExitGames",
                  "nodeType": "VariableDeclaration",
                  "scope": 12121,
                  "src": "1525:31:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12094,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1525:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12097,
                  "name": "_authority",
                  "nodeType": "VariableDeclaration",
                  "scope": 12121,
                  "src": "1566:18:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12096,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1566:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12099,
                  "name": "_maintainer",
                  "nodeType": "VariableDeclaration",
                  "scope": 12121,
                  "src": "1594:19:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12098,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1594:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1445:174:75"
            },
            "returnParameters": {
              "id": 12111,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1803:0:75"
            },
            "scope": 12152,
            "src": "1434:450:75",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12128,
              "nodeType": "Block",
              "src": "1945:34:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12126,
                    "name": "maintainer",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12087,
                    "src": "1962:10:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 12125,
                  "id": 12127,
                  "nodeType": "Return",
                  "src": "1955:17:75"
                }
              ]
            },
            "documentation": null,
            "id": 12129,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getMaintainer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12122,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1912:2:75"
            },
            "returnParameters": {
              "id": 12125,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12124,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12129,
                  "src": "1936:7:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12123,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1936:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1935:9:75"
            },
            "scope": 12152,
            "src": "1890:89:75",
            "stateMutability": "view",
            "superFunction": 12297,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12136,
              "nodeType": "Block",
              "src": "2135:31:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12134,
                    "name": "version",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12089,
                    "src": "2152:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 12133,
                  "id": 12135,
                  "nodeType": "Return",
                  "src": "2145:14:75"
                }
              ]
            },
            "documentation": "@notice Gets the semantic version of the current deployed contracts",
            "id": 12137,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVersion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12130,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2094:2:75"
            },
            "returnParameters": {
              "id": 12133,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12132,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12137,
                  "src": "2120:13:75",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12131,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2120:6:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2119:15:75"
            },
            "scope": 12152,
            "src": "2075:91:75",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12150,
              "nodeType": "Block",
              "src": "2384:35:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 12146,
                      "name": "version",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12089,
                      "src": "2394:7:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 12147,
                      "name": "_version",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12139,
                      "src": "2404:8:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2394:18:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 12149,
                  "nodeType": "ExpressionStatement",
                  "src": "2394:18:75"
                }
              ]
            },
            "documentation": "@notice Sets the semantic version of the current deployed contracts\n@param _version is semver string",
            "id": 12151,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 12142,
                      "name": "getMaintainer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12129
                      ],
                      "referencedDeclaration": 12129,
                      "src": "2367:13:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 12143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2367:15:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 12144,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12141,
                  "name": "onlyFrom",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 14290,
                  "src": "2358:8:75",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2358:25:75"
              }
            ],
            "name": "setVersion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12139,
                  "name": "_version",
                  "nodeType": "VariableDeclaration",
                  "scope": 12151,
                  "src": "2327:22:75",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12138,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2327:6:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2326:24:75"
            },
            "returnParameters": {
              "id": 12145,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2384:0:75"
            },
            "scope": 12152,
            "src": "2307:112:75",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 12153,
        "src": "212:2209:75"
      }
    ],
    "src": "0:2421:75"
  },
  "legacyAST": {
    "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/PlasmaFramework.sol",
    "exportedSymbols": {
      "PlasmaFramework": [
        12152
      ]
    },
    "id": 12153,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 12067,
        "literals": [
          "solidity",
          "0.5",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:75"
      },
      {
        "id": 12068,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "24:33:75"
      },
      {
        "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/BlockController.sol",
        "file": "./BlockController.sol",
        "id": 12069,
        "nodeType": "ImportDirective",
        "scope": 12153,
        "sourceUnit": 11464,
        "src": "59:31:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/ExitGameController.sol",
        "file": "./ExitGameController.sol",
        "id": 12070,
        "nodeType": "ImportDirective",
        "scope": 12153,
        "sourceUnit": 12066,
        "src": "91:34:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/registries/VaultRegistry.sol",
        "file": "./registries/VaultRegistry.sol",
        "id": 12071,
        "nodeType": "ImportDirective",
        "scope": 12153,
        "sourceUnit": 12614,
        "src": "126:40:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/registries/ExitGameRegistry.sol",
        "file": "./registries/ExitGameRegistry.sol",
        "id": 12072,
        "nodeType": "ImportDirective",
        "scope": 12153,
        "sourceUnit": 12442,
        "src": "167:43:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12073,
              "name": "VaultRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12613,
              "src": "240:13:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_VaultRegistry_$12613",
                "typeString": "contract VaultRegistry"
              }
            },
            "id": 12074,
            "nodeType": "InheritanceSpecifier",
            "src": "240:13:75"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12075,
              "name": "ExitGameRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12441,
              "src": "255:16:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ExitGameRegistry_$12441",
                "typeString": "contract ExitGameRegistry"
              }
            },
            "id": 12076,
            "nodeType": "InheritanceSpecifier",
            "src": "255:16:75"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12077,
              "name": "ExitGameController",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12065,
              "src": "273:18:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ExitGameController_$12065",
                "typeString": "contract ExitGameController"
              }
            },
            "id": 12078,
            "nodeType": "InheritanceSpecifier",
            "src": "273:18:75"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12079,
              "name": "BlockController",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11463,
              "src": "293:15:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BlockController_$11463",
                "typeString": "contract BlockController"
              }
            },
            "id": 12080,
            "nodeType": "InheritanceSpecifier",
            "src": "293:15:75"
          }
        ],
        "contractDependencies": [
          11463,
          12065,
          12441,
          12613,
          14291
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 12152,
        "linearizedBaseContracts": [
          12152,
          11463,
          12065,
          12441,
          12613,
          14291
        ],
        "name": "PlasmaFramework",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 12083,
            "name": "CHILD_BLOCK_INTERVAL",
            "nodeType": "VariableDeclaration",
            "scope": 12152,
            "src": "315:51:75",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 12081,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "315:7:75",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31303030",
              "id": 12082,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "362:4:75",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000_by_1",
                "typeString": "int_const 1000"
              },
              "value": "1000"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12085,
            "name": "minExitPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 12152,
            "src": "1340:28:75",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 12084,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1340:7:75",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12087,
            "name": "maintainer",
            "nodeType": "VariableDeclaration",
            "scope": 12152,
            "src": "1374:26:75",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 12086,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1374:7:75",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 12089,
            "name": "version",
            "nodeType": "VariableDeclaration",
            "scope": 12152,
            "src": "1406:21:75",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 12088,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1406:6:75",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12120,
              "nodeType": "Block",
              "src": "1803:81:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 12112,
                      "name": "minExitPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12085,
                      "src": "1813:13:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 12113,
                      "name": "_minExitPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12091,
                      "src": "1829:14:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1813:30:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12115,
                  "nodeType": "ExpressionStatement",
                  "src": "1813:30:75"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 12116,
                      "name": "maintainer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12087,
                      "src": "1853:10:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 12117,
                      "name": "_maintainer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12099,
                      "src": "1866:11:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1853:24:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 12119,
                  "nodeType": "ExpressionStatement",
                  "src": "1853:24:75"
                }
              ]
            },
            "documentation": null,
            "id": 12121,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 12102,
                    "name": "CHILD_BLOCK_INTERVAL",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12083,
                    "src": "1659:20:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 12103,
                    "name": "_minExitPeriod",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12091,
                    "src": "1681:14:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 12104,
                    "name": "_initialImmuneVaults",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12093,
                    "src": "1697:20:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 12105,
                    "name": "_authority",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12097,
                    "src": "1719:10:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 12106,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12101,
                  "name": "BlockController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11463,
                  "src": "1643:15:75",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_BlockController_$11463_$",
                    "typeString": "type(contract BlockController)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1643:87:75"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 12108,
                    "name": "_minExitPeriod",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12091,
                    "src": "1758:14:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 12109,
                    "name": "_initialImmuneExitGames",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12095,
                    "src": "1774:23:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 12110,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12107,
                  "name": "ExitGameController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12065,
                  "src": "1739:18:75",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ExitGameController_$12065_$",
                    "typeString": "type(contract ExitGameController)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1739:59:75"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12100,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12091,
                  "name": "_minExitPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 12121,
                  "src": "1455:22:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12090,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1455:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12093,
                  "name": "_initialImmuneVaults",
                  "nodeType": "VariableDeclaration",
                  "scope": 12121,
                  "src": "1487:28:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12092,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1487:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12095,
                  "name": "_initialImmuneExitGames",
                  "nodeType": "VariableDeclaration",
                  "scope": 12121,
                  "src": "1525:31:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12094,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1525:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12097,
                  "name": "_authority",
                  "nodeType": "VariableDeclaration",
                  "scope": 12121,
                  "src": "1566:18:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12096,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1566:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12099,
                  "name": "_maintainer",
                  "nodeType": "VariableDeclaration",
                  "scope": 12121,
                  "src": "1594:19:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12098,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1594:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1445:174:75"
            },
            "returnParameters": {
              "id": 12111,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1803:0:75"
            },
            "scope": 12152,
            "src": "1434:450:75",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12128,
              "nodeType": "Block",
              "src": "1945:34:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12126,
                    "name": "maintainer",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12087,
                    "src": "1962:10:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 12125,
                  "id": 12127,
                  "nodeType": "Return",
                  "src": "1955:17:75"
                }
              ]
            },
            "documentation": null,
            "id": 12129,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getMaintainer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12122,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1912:2:75"
            },
            "returnParameters": {
              "id": 12125,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12124,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12129,
                  "src": "1936:7:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12123,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1936:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1935:9:75"
            },
            "scope": 12152,
            "src": "1890:89:75",
            "stateMutability": "view",
            "superFunction": 12297,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12136,
              "nodeType": "Block",
              "src": "2135:31:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12134,
                    "name": "version",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12089,
                    "src": "2152:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 12133,
                  "id": 12135,
                  "nodeType": "Return",
                  "src": "2145:14:75"
                }
              ]
            },
            "documentation": "@notice Gets the semantic version of the current deployed contracts",
            "id": 12137,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVersion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12130,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2094:2:75"
            },
            "returnParameters": {
              "id": 12133,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12132,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12137,
                  "src": "2120:13:75",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12131,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2120:6:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2119:15:75"
            },
            "scope": 12152,
            "src": "2075:91:75",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12150,
              "nodeType": "Block",
              "src": "2384:35:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 12146,
                      "name": "version",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12089,
                      "src": "2394:7:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 12147,
                      "name": "_version",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12139,
                      "src": "2404:8:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2394:18:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 12149,
                  "nodeType": "ExpressionStatement",
                  "src": "2394:18:75"
                }
              ]
            },
            "documentation": "@notice Sets the semantic version of the current deployed contracts\n@param _version is semver string",
            "id": 12151,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 12142,
                      "name": "getMaintainer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12129
                      ],
                      "referencedDeclaration": 12129,
                      "src": "2367:13:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 12143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2367:15:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 12144,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12141,
                  "name": "onlyFrom",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 14290,
                  "src": "2358:8:75",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2358:25:75"
              }
            ],
            "name": "setVersion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12139,
                  "name": "_version",
                  "nodeType": "VariableDeclaration",
                  "scope": 12151,
                  "src": "2327:22:75",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12138,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2327:6:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2326:24:75"
            },
            "returnParameters": {
              "id": 12145,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2384:0:75"
            },
            "scope": 12152,
            "src": "2307:112:75",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 12153,
        "src": "212:2209:75"
      }
    ],
    "src": "0:2421:75"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.11+commit.c082d0b4.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.16",
  "updatedAt": "2020-02-19T07:32:14.963Z",
  "devdoc": {
    "methods": {
      "activateChildChain()": {
        "details": "This is a preserved action for authority account to start its nonce with 1.     Child chain rely ethereum nonce to protect re-org: https://git.io/JecDG     see discussion: https://git.io/JenaT, https://git.io/JecDO"
      },
      "activateNonReentrant()": {
        "details": "Accessible only from non quarantined exit games, uses a mutex"
      },
      "addExitQueue(uint256,address)": {
        "details": "The queue is created as a new contract instance",
        "params": {
          "token": "Address of the token",
          "vaultId": "ID of the vault"
        }
      },
      "batchFlagOutputsFinalized(bytes32[])": {
        "params": {
          "_outputIds": "Output IDs to flag"
        }
      },
      "deactivateNonReentrant()": {
        "details": "Accessible only from non quarantined exit games, uses a mutex"
      },
      "enqueue(uint256,address,uint64,(uint64,uint16,uint16),uint160,address)": {
        "details": "emits ExitQueued event, which can be used to back trace the priority inside the queueCaller of this function should add \"pragma experimental ABIEncoderV2;\" on top of filePriority (exitableAt, txPos, exitId) must be unique per queue. Do not enqueue when the same priority is already in the queue.",
        "params": {
          "exitId": "ID used by the exit processor contract to determine how to process the exit",
          "exitProcessor": "The exit processor contract, called during \"processExits\"",
          "exitableAt": "The earliest time a specified exit can be processed",
          "token": "Token for the exit",
          "txPos": "Transaction position for the exit priority. For SE it should be the exit tx, for IFE it should be the youngest input tx position.",
          "vaultId": "Vault ID of the vault that stores exiting funds"
        },
        "return": "A unique priority number computed for the exit"
      },
      "flagOutputFinalized(bytes32)": {
        "params": {
          "_outputId": "The output ID to flag as spent"
        }
      },
      "hasExitQueue(uint256,address)": {
        "params": {
          "token": "Address of the token",
          "vaultId": "ID of the vault that handles the token"
        },
        "return": "bool Defines whether the queue for a token was created"
      },
      "isAnyOutputFinalized(bytes32[])": {
        "params": {
          "_outputIds": "Output IDs to check"
        }
      },
      "isExitGameSafeToUse(address)": {
        "details": "Exposes information about exit games quarantine",
        "params": {
          "_contract": "Address of the exit game contract"
        },
        "return": "boolean Whether the contract is safe to use and is not under quarantine"
      },
      "processExits(uint256,address,uint160,uint256)": {
        "details": "Emits ProcessedExitsNum event",
        "params": {
          "maxExitsToProcess": "Maximum number of exits to process",
          "token": "The token type to process",
          "topExitId": "Unique identifier for prioritizing the first exit to process. Set to zero to skip this check.",
          "vaultId": "Vault ID of the vault that stores exiting funds"
        },
        "return": "Total number of processed exits"
      },
      "registerExitGame(uint256,address,uint8)": {
        "details": "Emits ExitGameRegistered event to notify clients",
        "params": {
          "_contract": "Address of the exit game contract",
          "_protocol": "The transaction protocol, either 1 for MVP or 2 for MoreVP",
          "_txType": "The tx type where the exit game wants to register"
        }
      },
      "registerVault(uint256,address)": {
        "details": "emits VaultRegistered event to notify clients",
        "params": {
          "_vaultAddress": "Address of the vault contract",
          "_vaultId": "The ID for the vault contract to register"
        }
      },
      "setVersion(string)": {
        "params": {
          "_version": "is semver string"
        }
      },
      "submitBlock(bytes32)": {
        "details": "emit BlockSubmitted eventBlock number jumps 'childBlockInterval' per submissionSee discussion in https://github.com/omisego/plasma-contracts/issues/233",
        "params": {
          "_blockRoot": "Merkle root of the Plasma block"
        }
      },
      "submitDepositBlock(bytes32)": {
        "details": "Block number adds 1 per submission; it's possible to have at most 'childBlockInterval' deposit blocks between two child chain blocks",
        "params": {
          "_blockRoot": "Merkle root of the Plasma block"
        },
        "return": "The deposit block number"
      }
    }
  },
  "userdoc": {
    "methods": {
      "activateChildChain()": {
        "notice": "Activates the child chain so that child chain can start to submit child blocks to root chainCan only be called once by the authority.Sets isChildChainActivated to true and emits the ChildChainActivated event."
      },
      "activateNonReentrant()": {
        "notice": "Activates non reentrancy mode        Guards against reentering into publicly accessible code that modifies state related to exits"
      },
      "addExitQueue(uint256,address)": {
        "notice": "Adds queue to the Plasma framework"
      },
      "batchFlagOutputsFinalized(bytes32[])": {
        "notice": "Batch flags already spent outputs"
      },
      "deactivateNonReentrant()": {
        "notice": "Deactivates non reentrancy mode"
      },
      "enqueue(uint256,address,uint64,(uint64,uint16,uint16),uint160,address)": {
        "notice": "Enqueue exits from exit game contracts is a function that places the exit into the        priority queue to enforce the priority of exit during 'processExits'"
      },
      "exitGameToTxType(address)": {
        "notice": "Public getter for retrieving tx type with exit game address"
      },
      "exitGames(uint256)": {
        "notice": "Public getter for retrieving exit game address with tx type"
      },
      "flagOutputFinalized(bytes32)": {
        "notice": "Flags a single output as spent"
      },
      "getVersion()": {
        "notice": "Gets the semantic version of the current deployed contracts"
      },
      "hasExitQueue(uint256,address)": {
        "notice": "Checks if the queue for a specified token was created"
      },
      "isAnyOutputFinalized(bytes32[])": {
        "notice": "Checks whether any of the output with the given outputIds is already spent"
      },
      "isExitGameSafeToUse(address)": {
        "notice": "Checks whether the contract is safe to use and is not under quarantine"
      },
      "processExits(uint256,address,uint160,uint256)": {
        "notice": "Processes any exits that have completed the challenge period. Exits are processed according to the exit priority."
      },
      "protocols(uint256)": {
        "notice": "Public getter for retrieving protocol with tx type"
      },
      "registerExitGame(uint256,address,uint8)": {
        "notice": "Registers an exit game within the PlasmaFramework. Only the maintainer can call the function."
      },
      "registerVault(uint256,address)": {
        "notice": "Register a vault within the PlasmaFramework. Only a maintainer can make the call."
      },
      "setVersion(string)": {
        "notice": "Sets the semantic version of the current deployed contracts"
      },
      "submitBlock(bytes32)": {
        "notice": "Allows the authority to submit the Merkle root of a Plasma block"
      },
      "submitDepositBlock(bytes32)": {
        "notice": "Submits a block for deposit"
      },
      "vaultToId(address)": {
        "notice": "Public getter for retrieving vault ID with vault address"
      },
      "vaults(uint256)": {
        "notice": "Public getter for retrieving vault address with vault ID"
      }
    }
  }
}