{
  "contractName": "TokenSale",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "hasClosed",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "balances",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rate",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "cap",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "weiRaised",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "contributions",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "closingTime",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "capReached",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "wallet",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "caps",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_beneficiary",
          "type": "address"
        }
      ],
      "name": "getUserCap",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "withdrawTokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_beneficiaries",
          "type": "address[]"
        },
        {
          "name": "_cap",
          "type": "uint256"
        }
      ],
      "name": "setGroupCap",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "openingTime",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_beneficiary",
          "type": "address"
        }
      ],
      "name": "getUserContribution",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "remainingTokens",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tokenWallet",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "name": "_cap",
          "type": "uint256"
        }
      ],
      "name": "setUserCap",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_beneficiary",
          "type": "address"
        }
      ],
      "name": "buyTokens",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_rate",
          "type": "uint256"
        },
        {
          "name": "_wallet",
          "type": "address"
        },
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_tokenWallet",
          "type": "address"
        },
        {
          "name": "_cap",
          "type": "uint256"
        },
        {
          "name": "_startTime",
          "type": "uint256"
        },
        {
          "name": "_endTime",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipRenounced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "purchaser",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TokenPurchase",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "changeTokenAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_wallet",
          "type": "address"
        }
      ],
      "name": "changeWalletAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_rate",
          "type": "uint256"
        }
      ],
      "name": "changeRate",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_cap",
          "type": "uint256"
        }
      ],
      "name": "changeCap",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_tokenWallet",
          "type": "address"
        }
      ],
      "name": "changeTokenWallet",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5060405160e080611b1183398101806040528101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050828483838a8a8a60008311151561008557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156100c157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156100fd57600080fd5b8260028190555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505042821015151561019757600080fd5b8181101515156101a657600080fd5b81600481905550806005819055505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156101f257600080fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008111151561028457600080fd5b80600b81905550505050505050505061186f806102a26000396000f30060806040526004361061016a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631515bc2b1461017557806327e235e3146101a45780632c4e722e146101fb578063355274ea146102265780634042b66f1461025157806342e94c901461027c5780634b6753bc146102d35780634f935945146102fe578063521eb2731461032d57806366d97b2114610384578063715018a6146103db57806374e7493b146103f257806375821d211461041f578063800edb9d146104625780638b58c64c1461048f5780638d8f2adb146104e65780638da5cb5b146104fd578063a31f61fc14610554578063b7a8807c14610599578063bb8b2b47146105c4578063bf5839031461061b578063bff99c6c14610646578063c3143fe51461069d578063c9cda91f146106ea578063ec8ac4d81461072d578063ec8edf7a14610763578063f2fde38b146107a6578063fc0c546a146107e9575b61017333610840565b005b34801561018157600080fd5b5061018a61090e565b604051808215151515815260200191505060405180910390f35b3480156101b057600080fd5b506101e5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061091a565b6040518082815260200191505060405180910390f35b34801561020757600080fd5b50610210610932565b6040518082815260200191505060405180910390f35b34801561023257600080fd5b5061023b610938565b6040518082815260200191505060405180910390f35b34801561025d57600080fd5b5061026661093e565b6040518082815260200191505060405180910390f35b34801561028857600080fd5b506102bd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610944565b6040518082815260200191505060405180910390f35b3480156102df57600080fd5b506102e861095c565b6040518082815260200191505060405180910390f35b34801561030a57600080fd5b50610313610962565b604051808215151515815260200191505060405180910390f35b34801561033957600080fd5b50610342610971565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039057600080fd5b506103c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610997565b6040518082815260200191505060405180910390f35b3480156103e757600080fd5b506103f06109af565b005b3480156103fe57600080fd5b5061041d60048036038101908080359060200190929190505050610ab4565b005b34801561042b57600080fd5b50610460600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b1a565b005b34801561046e57600080fd5b5061048d60048036038101908080359060200190929190505050610bba565b005b34801561049b57600080fd5b506104d0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c20565b6040518082815260200191505060405180910390f35b3480156104f257600080fd5b506104fb610c69565b005b34801561050957600080fd5b50610512610d21565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561056057600080fd5b5061059760048036038101908080359060200190820180359060200191909192939192939080359060200190929190505050610d47565b005b3480156105a557600080fd5b506105ae610e36565b6040518082815260200191505060405180910390f35b3480156105d057600080fd5b50610605600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e3c565b6040518082815260200191505060405180910390f35b34801561062757600080fd5b50610630610e85565b6040518082815260200191505060405180910390f35b34801561065257600080fd5b5061065b610fd9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106a957600080fd5b506106e8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fff565b005b3480156106f657600080fd5b5061072b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110a3565b005b610761600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610840565b005b34801561076f57600080fd5b506107a4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611142565b005b3480156107b257600080fd5b506107e7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111e2565b005b3480156107f557600080fd5b506107fe61124a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600080349150610850838361126f565b610859826112a2565b9050610870826003546112c090919063ffffffff16565b60038190555061088083826112dc565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188484604051808381526020018281526020019250505060405180910390a36108f78383611375565b6108ff611418565b6109098383611483565b505050565b60006005544211905090565b60066020528060005260406000206000915090505481565b60025481565b600b5481565b60035481565b60096020528060005260406000206000915090505481565b60055481565b6000600b546003541015905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915090505481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a0b57600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b1057600080fd5b8060028190555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b7657600080fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c1657600080fd5b80600b8190555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610c7361090e565b1515610c7e57600080fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515610ccf57600080fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d1e3382611487565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610da557600080fd5b600090505b83839050811015610e305781600a60008686858181101515610dc857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050610daa565b50505050565b60045481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015610f9957600080fd5b505af1158015610fad573d6000803e3d6000fd5b505050506040513d6020811015610fc357600080fd5b8101908080519060200190929190505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561105b57600080fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110ff57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561119e57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561123e57600080fd5b611247816115e1565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61127982826116dd565b600b54611291826003546112c090919063ffffffff16565b1115151561129e57600080fd5b5050565b60006112b96002548361178a90919063ffffffff16565b9050919050565b600081830190508281101515156112d357fe5b80905092915050565b61132e81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112c090919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b61137f82826117c2565b6113d181600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112c090919063ffffffff16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611480573d6000803e3d6000fd5b50565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156115a157600080fd5b505af11580156115b5573d6000803e3d6000fd5b505050506040513d60208110156115cb57600080fd5b8101908080519060200190929190505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561161d57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116e782826117c6565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461177982600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112c090919063ffffffff16565b1115151561178657600080fd5b5050565b60008083141561179d57600090506117bc565b81830290508183828115156117ae57fe5b041415156117b857fe5b8090505b92915050565b5050565b60045442101580156117da57506005544211155b15156117e557600080fd5b6117ef82826117f3565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561182f57600080fd5b6000811415151561183f57600080fd5b50505600a165627a7a7230582059846ffc0ebdf60d3117180cd5938ecef2f5f1af9b88ccd26497e0cd88611ec90029",
  "deployedBytecode": "0x60806040526004361061016a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631515bc2b1461017557806327e235e3146101a45780632c4e722e146101fb578063355274ea146102265780634042b66f1461025157806342e94c901461027c5780634b6753bc146102d35780634f935945146102fe578063521eb2731461032d57806366d97b2114610384578063715018a6146103db57806374e7493b146103f257806375821d211461041f578063800edb9d146104625780638b58c64c1461048f5780638d8f2adb146104e65780638da5cb5b146104fd578063a31f61fc14610554578063b7a8807c14610599578063bb8b2b47146105c4578063bf5839031461061b578063bff99c6c14610646578063c3143fe51461069d578063c9cda91f146106ea578063ec8ac4d81461072d578063ec8edf7a14610763578063f2fde38b146107a6578063fc0c546a146107e9575b61017333610840565b005b34801561018157600080fd5b5061018a61090e565b604051808215151515815260200191505060405180910390f35b3480156101b057600080fd5b506101e5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061091a565b6040518082815260200191505060405180910390f35b34801561020757600080fd5b50610210610932565b6040518082815260200191505060405180910390f35b34801561023257600080fd5b5061023b610938565b6040518082815260200191505060405180910390f35b34801561025d57600080fd5b5061026661093e565b6040518082815260200191505060405180910390f35b34801561028857600080fd5b506102bd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610944565b6040518082815260200191505060405180910390f35b3480156102df57600080fd5b506102e861095c565b6040518082815260200191505060405180910390f35b34801561030a57600080fd5b50610313610962565b604051808215151515815260200191505060405180910390f35b34801561033957600080fd5b50610342610971565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039057600080fd5b506103c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610997565b6040518082815260200191505060405180910390f35b3480156103e757600080fd5b506103f06109af565b005b3480156103fe57600080fd5b5061041d60048036038101908080359060200190929190505050610ab4565b005b34801561042b57600080fd5b50610460600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b1a565b005b34801561046e57600080fd5b5061048d60048036038101908080359060200190929190505050610bba565b005b34801561049b57600080fd5b506104d0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c20565b6040518082815260200191505060405180910390f35b3480156104f257600080fd5b506104fb610c69565b005b34801561050957600080fd5b50610512610d21565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561056057600080fd5b5061059760048036038101908080359060200190820180359060200191909192939192939080359060200190929190505050610d47565b005b3480156105a557600080fd5b506105ae610e36565b6040518082815260200191505060405180910390f35b3480156105d057600080fd5b50610605600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e3c565b6040518082815260200191505060405180910390f35b34801561062757600080fd5b50610630610e85565b6040518082815260200191505060405180910390f35b34801561065257600080fd5b5061065b610fd9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106a957600080fd5b506106e8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fff565b005b3480156106f657600080fd5b5061072b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110a3565b005b610761600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610840565b005b34801561076f57600080fd5b506107a4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611142565b005b3480156107b257600080fd5b506107e7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111e2565b005b3480156107f557600080fd5b506107fe61124a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600080349150610850838361126f565b610859826112a2565b9050610870826003546112c090919063ffffffff16565b60038190555061088083826112dc565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188484604051808381526020018281526020019250505060405180910390a36108f78383611375565b6108ff611418565b6109098383611483565b505050565b60006005544211905090565b60066020528060005260406000206000915090505481565b60025481565b600b5481565b60035481565b60096020528060005260406000206000915090505481565b60055481565b6000600b546003541015905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915090505481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a0b57600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b1057600080fd5b8060028190555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b7657600080fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c1657600080fd5b80600b8190555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610c7361090e565b1515610c7e57600080fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515610ccf57600080fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d1e3382611487565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610da557600080fd5b600090505b83839050811015610e305781600a60008686858181101515610dc857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050610daa565b50505050565b60045481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015610f9957600080fd5b505af1158015610fad573d6000803e3d6000fd5b505050506040513d6020811015610fc357600080fd5b8101908080519060200190929190505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561105b57600080fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110ff57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561119e57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561123e57600080fd5b611247816115e1565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61127982826116dd565b600b54611291826003546112c090919063ffffffff16565b1115151561129e57600080fd5b5050565b60006112b96002548361178a90919063ffffffff16565b9050919050565b600081830190508281101515156112d357fe5b80905092915050565b61132e81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112c090919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b61137f82826117c2565b6113d181600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112c090919063ffffffff16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611480573d6000803e3d6000fd5b50565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156115a157600080fd5b505af11580156115b5573d6000803e3d6000fd5b505050506040513d60208110156115cb57600080fd5b8101908080519060200190929190505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561161d57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116e782826117c6565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461177982600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112c090919063ffffffff16565b1115151561178657600080fd5b5050565b60008083141561179d57600090506117bc565b81830290508183828115156117ae57fe5b041415156117b857fe5b8090505b92915050565b5050565b60045442101580156117da57506005544211155b15156117e557600080fd5b6117ef82826117f3565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561182f57600080fd5b6000811415151561183f57600080fd5b50505600a165627a7a7230582059846ffc0ebdf60d3117180cd5938ecef2f5f1af9b88ccd26497e0cd88611ec90029",
  "sourceMap": "470:903:0:-;;;603:284;8:9:-1;5:2;;;30:1;27;20:12;5:2;603:284:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;837:4;803:12;863:10;875:8;756:5;763:7;772:6;1952:1:1;1944:5;:9;1936:18;;;;;;;;1987:1;1968:21;;:7;:21;;;;1960:30;;;;;;;;2022:1;2004:20;;:6;:20;;;;1996:29;;;;;;;;2039:5;2032:4;:12;;;;2059:7;2050:6;;:16;;;;;;;;;;;;;;;;;;2080:6;2072:5;;:14;;;;;;;;;;;;;;;;;;1865:226;;;886:15:7;870:12;:31;;862:40;;;;;;;;932:12;916;:28;;908:37;;;;;;;;966:12;952:11;:26;;;;998:12;984:11;:26;;;;735:280;;624:1:4;600:26;;:12;:26;;;;592:35;;;;;;;;647:12;633:11;;:26;;;;;;;;;;;;;;;;;;545:119;575:10:9;567:5;;:18;;;;;;;;;;;;;;;;;;472:1:5;465:4;:8;457:17;;;;;;;;486:4;480:3;:10;;;;418:77;603:284:0;;;;;;;470:903;;;;;;",
  "deployedSourceMap": "470:903:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2321:21:1;2331:10;2321:9;:21::i;:::-;470:903:0;1169:153:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1169:153:7;;;;;;;;;;;;;;;;;;;;;;;;;;;334:43:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;334:43:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1234:19:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1234:19:1;;;;;;;;;;;;;;;;;;;;;;;252:18:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;252:18:5;;;;;;;;;;;;;;;;;;;;;;;1284:24:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1284:24:1;;;;;;;;;;;;;;;;;;;;;;;305:48:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;305:48:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;292:26:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;292:26:7;;;;;;;;;;;;;;;;;;;;;;;603:83:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;603:83:5;;;;;;;;;;;;;;;;;;;;;;;;;;;932:21:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;932:21:1;;;;;;;;;;;;;;;;;;;;;;;;;;;357:39:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;357:39:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;827:111:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;827:111:9;;;;;;1092:81:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1092:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;1262:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1262:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1179:77;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1179:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;1240:108:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1240:108:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;447:202:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;447:202:3;;;;;;238:20:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:9;;;;;;;;;;;;;;;;;;;;;;;;;;;864:209:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;864:209:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;262:26:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;262:26:7;;;;;;;;;;;;;;;;;;;;;;;1519:132:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1519:132:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;793:109:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;793:109:4;;;;;;;;;;;;;;;;;;;;;;;352:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;352:26:4;;;;;;;;;;;;;;;;;;;;;;;;;;;569:111:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;569:111:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;894:90:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;894:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2483:577:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;990:96:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;990:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1100:103:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1100:103:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;870:18:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;870:18:1;;;;;;;;;;;;;;;;;;;;;;;;;;;2483:577;2546:17;2677:14;2566:9;2546:29;;2581:45;2602:12;2616:9;2581:20;:45::i;:::-;2694:26;2710:9;2694:15;:26::i;:::-;2677:43;;2759:24;2773:9;2759;;:13;;:24;;;;:::i;:::-;2747:9;:36;;;;2790:38;2807:12;2821:6;2790:16;:38::i;:::-;2878:12;2839:88;;2860:10;2839:88;;;2898:9;2915:6;2839:88;;;;;;;;;;;;;;;;;;;;;;;;2934:47;2957:12;2971:9;2934:22;:47::i;:::-;2988:15;:13;:15::i;:::-;3009:46;3031:12;3045:9;3009:21;:46::i;:::-;2483:577;;;:::o;1169:153:7:-;1211:4;1306:11;;1288:15;:29;1281:36;;1169:153;:::o;334:43:3:-;;;;;;;;;;;;;;;;;:::o;1234:19:1:-;;;;:::o;252:18:5:-;;;;:::o;1284:24:1:-;;;;:::o;305:48:6:-;;;;;;;;;;;;;;;;;:::o;292:26:7:-;;;;:::o;603:83:5:-;646:4;678:3;;665:9;;:16;;658:23;;603:83;:::o;932:21:1:-;;;;;;;;;;;;;:::o;357:39:6:-;;;;;;;;;;;;;;;;;:::o;827:111:9:-;719:5;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;903:5;;;;;;;;;;;884:25;;;;;;;;;;;;931:1;915:5;;:18;;;;;;;;;;;;;;;;;;827:111::o;1092:81:0:-;719:5:9;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1161:5:0;1154:4;:12;;;;1092:81;:::o;1262:109::-;719:5:9;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1352:12:0;1338:11;;:26;;;;;;;;;;;;;;;;;;1262:109;:::o;1179:77::-;719:5:9;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1245:4:0;1239:3;:10;;;;1179:77;:::o;1240:108:6:-;1303:7;1325:4;:18;1330:12;1325:18;;;;;;;;;;;;;;;;1318:25;;1240:108;;;:::o;447:202:3:-;512:14;494:11;:9;:11::i;:::-;486:20;;;;;;;;529:8;:20;538:10;529:20;;;;;;;;;;;;;;;;512:37;;572:1;563:6;:10;555:19;;;;;;;;603:1;580:8;:20;589:10;580:20;;;;;;;;;;;;;;;:24;;;;610:34;625:10;637:6;610:14;:34::i;:::-;447:202;:::o;238:20:9:-;;;;;;;;;;;;;:::o;864:209:6:-;977:9;719:5:9;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;989:1:6;977:13;;972:97;996:14;;:21;;992:1;:25;972:97;;;1058:4;1032;:23;1037:14;;1052:1;1037:17;;;;;;;;;;;;;;;;;1032:23;;;;;;;;;;;;;;;:30;;;;1019:3;;;;;;;972:97;;;864:209;;;;:::o;262:26:7:-;;;;:::o;1519:132:6:-;1595:7;1619:13;:27;1633:12;1619:27;;;;;;;;;;;;;;;;1612:34;;1519:132;;;:::o;793:109:4:-;841:7;863:5;;;;;;;;;;;:15;;;879:11;;;;;;;;;;;892:4;863:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;863:34:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;863:34:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;863:34:4;;;;;;;;;;;;;;;;856:41;;793:109;:::o;352:26::-;;;;;;;;;;;;;:::o;569:111:6:-;719:5:9;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;671:4:6;650;:18;655:12;650:18;;;;;;;;;;;;;;;:25;;;;569:111;;:::o;894:90:0:-;719:5:9;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;971:6:0;963:5;;:14;;;;;;;;;;;;;;;;;;894:90;:::o;990:96::-;719:5:9;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1072:7:0;1063:6;;:16;;;;;;;;;;;;;;;;;;990:96;:::o;1100:103:9:-;719:5;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1169:29;1188:9;1169:18;:29::i;:::-;1100:103;:::o;870:18:1:-;;;;;;;;;;;;;:::o;872:209:5:-;977:52;1004:12;1018:10;977:26;:52::i;:::-;1072:3;;1043:25;1057:10;1043:9;;:13;;:25;;;;:::i;:::-;:32;;1035:41;;;;;;;;872:209;;:::o;5497:121:1:-;5569:7;5593:20;5608:4;;5593:10;:14;;:20;;;;:::i;:::-;5586:27;;5497:121;;;:::o;1214:123:8:-;1272:9;1297:1;1293;:5;1289:9;;1316:1;1311;:6;;1304:14;;;;;;1331:1;1324:8;;1214:123;;;;:::o;843:173:3:-;971:40;998:12;971:8;:22;980:12;971:22;;;;;;;;;;;;;;;;:26;;:40;;;;:::i;:::-;946:8;:22;955:12;946:22;;;;;;;;;;;;;;;:65;;;;843:173;;:::o;2254:245:6:-;2361:54;2390:12;2404:10;2361:28;:54::i;:::-;2451:43;2483:10;2451:13;:27;2465:12;2451:27;;;;;;;;;;;;;;;;:31;;:43;;;;:::i;:::-;2421:13;:27;2435:12;2421:27;;;;;;;;;;;;;;;:73;;;;2254:245;;:::o;5697:71:1:-;5737:6;;;;;;;;;;;:15;;:26;5753:9;5737:26;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5737:26:1;5697:71::o;3937:130::-;;;:::o;1083:165:4:-;1184:5;;;;;;;;;;;:18;;;1203:11;;;;;;;;;;;1216:12;1230;1184:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1184:59:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1184:59:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1184:59:4;;;;;;;;;;;;;;;;;1083:165;;:::o;1338:171:9:-;1429:1;1408:23;;:9;:23;;;;1400:32;;;;;;;;1471:9;1443:38;;1464:5;;;;;;;;;;;1443:38;;;;;;;;;;;;1495:9;1487:5;;:17;;;;;;;;;;;;;;;;;;1338:171;:::o;1844:242:6:-;1949:52;1976:12;1990:10;1949:26;:52::i;:::-;2062:4;:18;2067:12;2062:18;;;;;;;;;;;;;;;;2015:43;2047:10;2015:13;:27;2029:12;2015:27;;;;;;;;;;;;;;;;:31;;:43;;;;:::i;:::-;:65;;2007:74;;;;;;;;1844:242;;:::o;203:373:8:-;261:9;492:1;487;:6;483:35;;;510:1;503:8;;;;483:35;532:1;528;:5;524:9;;555:1;550;546;:5;;;;;;;;:10;539:18;;;;;;570:1;563:8;;203:373;;;;;:::o;5128:131:1:-;;;:::o;1504:180:7:-;499:11;;480:15;:30;;:64;;;;;533:11;;514:15;:30;;480:64;472:73;;;;;;;;1627:52;1654:12;1668:10;1627:26;:52::i;:::-;1504:180;;:::o;3484:175:1:-;3621:1;3597:26;;:12;:26;;;;3589:35;;;;;;;;3652:1;3638:10;:15;;3630:24;;;;;;;;3484:175;;:::o",
  "source": "pragma solidity ^0.4.24;\n\nimport \"openzeppelin-solidity/contracts/crowdsale/distribution/FinalizableCrowdsale.sol\";\nimport \"openzeppelin-solidity/contracts/crowdsale/distribution/PostDeliveryCrowdsale.sol\";\nimport \"openzeppelin-solidity/contracts/crowdsale/emission/AllowanceCrowdsale.sol\";\nimport \"openzeppelin-solidity/contracts/crowdsale/validation/CappedCrowdsale.sol\";\nimport \"openzeppelin-solidity/contracts/crowdsale/validation/IndividuallyCappedCrowdsale.sol\";\n\ncontract TokenSale is\n    PostDeliveryCrowdsale,\n    AllowanceCrowdsale,\n    IndividuallyCappedCrowdsale,\n    CappedCrowdsale {\n\n    constructor(uint256 _rate, address _wallet, ERC20 _token, address _tokenWallet, uint256 _cap, uint256 _startTime, uint256 _endTime) public\n    Crowdsale(_rate, _wallet, _token)\n    AllowanceCrowdsale(_tokenWallet)\n    CappedCrowdsale(_cap)\n    TimedCrowdsale (_startTime, _endTime) {}\n\n\n    function changeTokenAddress(ERC20 _token) public onlyOwner {\n        token = _token;\n    }\n\n    function changeWalletAddress(address _wallet) public onlyOwner {\n        wallet = _wallet;\n    }\n\n    function changeRate(uint256 _rate) public onlyOwner {\n        rate = _rate;\n    }\n\n    function changeCap(uint256 _cap) public onlyOwner {\n        cap = _cap;\n    }\n\n    function changeTokenWallet(address _tokenWallet) public onlyOwner {\n        tokenWallet = _tokenWallet;\n    }\n}\n",
  "sourcePath": "/ude/hb/projects/protocol/packages/reserve/smart-contracts/ethereum/contracts/TokenSale.sol",
  "ast": {
    "absolutePath": "/ude/hb/projects/protocol/packages/reserve/smart-contracts/ethereum/contracts/TokenSale.sol",
    "exportedSymbols": {
      "TokenSale": [
        108
      ]
    },
    "id": 109,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:0"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/crowdsale/distribution/FinalizableCrowdsale.sol",
        "file": "openzeppelin-solidity/contracts/crowdsale/distribution/FinalizableCrowdsale.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 109,
        "sourceUnit": 381,
        "src": "26:89:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/crowdsale/distribution/PostDeliveryCrowdsale.sol",
        "file": "openzeppelin-solidity/contracts/crowdsale/distribution/PostDeliveryCrowdsale.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 109,
        "sourceUnit": 450,
        "src": "116:90:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/crowdsale/emission/AllowanceCrowdsale.sol",
        "file": "openzeppelin-solidity/contracts/crowdsale/emission/AllowanceCrowdsale.sol",
        "id": 4,
        "nodeType": "ImportDirective",
        "scope": 109,
        "sourceUnit": 509,
        "src": "207:83:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/crowdsale/validation/CappedCrowdsale.sol",
        "file": "openzeppelin-solidity/contracts/crowdsale/validation/CappedCrowdsale.sol",
        "id": 5,
        "nodeType": "ImportDirective",
        "scope": 109,
        "sourceUnit": 571,
        "src": "291:82:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/crowdsale/validation/IndividuallyCappedCrowdsale.sol",
        "file": "openzeppelin-solidity/contracts/crowdsale/validation/IndividuallyCappedCrowdsale.sol",
        "id": 6,
        "nodeType": "ImportDirective",
        "scope": 109,
        "sourceUnit": 718,
        "src": "374:94:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7,
              "name": "PostDeliveryCrowdsale",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 449,
              "src": "496:21:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PostDeliveryCrowdsale_$449",
                "typeString": "contract PostDeliveryCrowdsale"
              }
            },
            "id": 8,
            "nodeType": "InheritanceSpecifier",
            "src": "496:21:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9,
              "name": "AllowanceCrowdsale",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 508,
              "src": "523:18:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AllowanceCrowdsale_$508",
                "typeString": "contract AllowanceCrowdsale"
              }
            },
            "id": 10,
            "nodeType": "InheritanceSpecifier",
            "src": "523:18:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11,
              "name": "IndividuallyCappedCrowdsale",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 717,
              "src": "547:27:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IndividuallyCappedCrowdsale_$717",
                "typeString": "contract IndividuallyCappedCrowdsale"
              }
            },
            "id": 12,
            "nodeType": "InheritanceSpecifier",
            "src": "547:27:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 13,
              "name": "CappedCrowdsale",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 570,
              "src": "580:15:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CappedCrowdsale_$570",
                "typeString": "contract CappedCrowdsale"
              }
            },
            "id": 14,
            "nodeType": "InheritanceSpecifier",
            "src": "580:15:0"
          }
        ],
        "contractDependencies": [
          332,
          449,
          508,
          570,
          717,
          804,
          984
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 108,
        "linearizedBaseContracts": [
          108,
          570,
          717,
          984,
          508,
          449,
          804,
          332
        ],
        "name": "TokenSale",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 46,
              "nodeType": "Block",
              "src": "885:2:0",
              "statements": []
            },
            "documentation": null,
            "id": 47,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 31,
                    "name": "_rate",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16,
                    "src": "756:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 32,
                    "name": "_wallet",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18,
                    "src": "763:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 33,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20,
                    "src": "772:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1027",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 34,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 30,
                  "name": "Crowdsale",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 332,
                  "src": "746:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Crowdsale_$332_$",
                    "typeString": "type(contract Crowdsale)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "746:33:0"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 36,
                    "name": "_tokenWallet",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 22,
                    "src": "803:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 37,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 35,
                  "name": "AllowanceCrowdsale",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 508,
                  "src": "784:18:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_AllowanceCrowdsale_$508_$",
                    "typeString": "type(contract AllowanceCrowdsale)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "784:32:0"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 39,
                    "name": "_cap",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24,
                    "src": "837:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 40,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 38,
                  "name": "CappedCrowdsale",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 570,
                  "src": "821:15:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_CappedCrowdsale_$570_$",
                    "typeString": "type(contract CappedCrowdsale)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "821:21:0"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 42,
                    "name": "_startTime",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 26,
                    "src": "863:10:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 43,
                    "name": "_endTime",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28,
                    "src": "875:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 44,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 41,
                  "name": "TimedCrowdsale",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 804,
                  "src": "847:14:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_TimedCrowdsale_$804_$",
                    "typeString": "type(contract TimedCrowdsale)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "847:37:0"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 29,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16,
                  "name": "_rate",
                  "nodeType": "VariableDeclaration",
                  "scope": 47,
                  "src": "615:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "615:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18,
                  "name": "_wallet",
                  "nodeType": "VariableDeclaration",
                  "scope": 47,
                  "src": "630:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "630:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 47,
                  "src": "647:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$1027",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1027,
                    "src": "647:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1027",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22,
                  "name": "_tokenWallet",
                  "nodeType": "VariableDeclaration",
                  "scope": 47,
                  "src": "661:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "661:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24,
                  "name": "_cap",
                  "nodeType": "VariableDeclaration",
                  "scope": 47,
                  "src": "683:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "683:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26,
                  "name": "_startTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 47,
                  "src": "697:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "697:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28,
                  "name": "_endTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 47,
                  "src": "717:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 27,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "717:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "614:120:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 45,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "885:0:0"
            },
            "scope": 108,
            "src": "603:284:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 58,
              "nodeType": "Block",
              "src": "953:31:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 56,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 54,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 117,
                      "src": "963:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$1027",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 55,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49,
                      "src": "971:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$1027",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "963:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1027",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 57,
                  "nodeType": "ExpressionStatement",
                  "src": "963:14:0"
                }
              ]
            },
            "documentation": null,
            "id": 59,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 52,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 51,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 932,
                  "src": "943:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "943:9:0"
              }
            ],
            "name": "changeTokenAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 50,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 59,
                  "src": "922:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$1027",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 48,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1027,
                    "src": "922:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1027",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "921:14:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 53,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "953:0:0"
            },
            "scope": 108,
            "src": "894:90:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 70,
              "nodeType": "Block",
              "src": "1053:33:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 68,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 66,
                      "name": "wallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 119,
                      "src": "1063:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 67,
                      "name": "_wallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61,
                      "src": "1072:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1063:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 69,
                  "nodeType": "ExpressionStatement",
                  "src": "1063:16:0"
                }
              ]
            },
            "documentation": null,
            "id": 71,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 64,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 63,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 932,
                  "src": "1043:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1043:9:0"
              }
            ],
            "name": "changeWalletAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 62,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61,
                  "name": "_wallet",
                  "nodeType": "VariableDeclaration",
                  "scope": 71,
                  "src": "1019:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 60,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1019:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1018:17:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 65,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1053:0:0"
            },
            "scope": 108,
            "src": "990:96:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 82,
              "nodeType": "Block",
              "src": "1144:29:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 80,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 78,
                      "name": "rate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 121,
                      "src": "1154:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 79,
                      "name": "_rate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 73,
                      "src": "1161:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1154:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 81,
                  "nodeType": "ExpressionStatement",
                  "src": "1154:12:0"
                }
              ]
            },
            "documentation": null,
            "id": 83,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 76,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 75,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 932,
                  "src": "1134:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1134:9:0"
              }
            ],
            "name": "changeRate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 74,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 73,
                  "name": "_rate",
                  "nodeType": "VariableDeclaration",
                  "scope": 83,
                  "src": "1112:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 72,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1112:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1111:15:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 77,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1144:0:0"
            },
            "scope": 108,
            "src": "1092:81:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 94,
              "nodeType": "Block",
              "src": "1229:27:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 92,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 90,
                      "name": "cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 519,
                      "src": "1239:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 91,
                      "name": "_cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 85,
                      "src": "1245:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1239:10:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 93,
                  "nodeType": "ExpressionStatement",
                  "src": "1239:10:0"
                }
              ]
            },
            "documentation": null,
            "id": 95,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 88,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 87,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 932,
                  "src": "1219:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1219:9:0"
              }
            ],
            "name": "changeCap",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 86,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 85,
                  "name": "_cap",
                  "nodeType": "VariableDeclaration",
                  "scope": 95,
                  "src": "1198:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 84,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1198:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1197:14:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 89,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1229:0:0"
            },
            "scope": 108,
            "src": "1179:77:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 106,
              "nodeType": "Block",
              "src": "1328:43:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 102,
                      "name": "tokenWallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 461,
                      "src": "1338:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 103,
                      "name": "_tokenWallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 97,
                      "src": "1352:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1338:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 105,
                  "nodeType": "ExpressionStatement",
                  "src": "1338:26:0"
                }
              ]
            },
            "documentation": null,
            "id": 107,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 100,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 99,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 932,
                  "src": "1318:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1318:9:0"
              }
            ],
            "name": "changeTokenWallet",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 98,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 97,
                  "name": "_tokenWallet",
                  "nodeType": "VariableDeclaration",
                  "scope": 107,
                  "src": "1289:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 96,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1289:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1288:22:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 101,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1328:0:0"
            },
            "scope": 108,
            "src": "1262:109:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 109,
        "src": "470:903:0"
      }
    ],
    "src": "0:1374:0"
  },
  "legacyAST": {
    "absolutePath": "/ude/hb/projects/protocol/packages/reserve/smart-contracts/ethereum/contracts/TokenSale.sol",
    "exportedSymbols": {
      "TokenSale": [
        108
      ]
    },
    "id": 109,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:0"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/crowdsale/distribution/FinalizableCrowdsale.sol",
        "file": "openzeppelin-solidity/contracts/crowdsale/distribution/FinalizableCrowdsale.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 109,
        "sourceUnit": 381,
        "src": "26:89:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/crowdsale/distribution/PostDeliveryCrowdsale.sol",
        "file": "openzeppelin-solidity/contracts/crowdsale/distribution/PostDeliveryCrowdsale.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 109,
        "sourceUnit": 450,
        "src": "116:90:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/crowdsale/emission/AllowanceCrowdsale.sol",
        "file": "openzeppelin-solidity/contracts/crowdsale/emission/AllowanceCrowdsale.sol",
        "id": 4,
        "nodeType": "ImportDirective",
        "scope": 109,
        "sourceUnit": 509,
        "src": "207:83:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/crowdsale/validation/CappedCrowdsale.sol",
        "file": "openzeppelin-solidity/contracts/crowdsale/validation/CappedCrowdsale.sol",
        "id": 5,
        "nodeType": "ImportDirective",
        "scope": 109,
        "sourceUnit": 571,
        "src": "291:82:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/crowdsale/validation/IndividuallyCappedCrowdsale.sol",
        "file": "openzeppelin-solidity/contracts/crowdsale/validation/IndividuallyCappedCrowdsale.sol",
        "id": 6,
        "nodeType": "ImportDirective",
        "scope": 109,
        "sourceUnit": 718,
        "src": "374:94:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7,
              "name": "PostDeliveryCrowdsale",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 449,
              "src": "496:21:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PostDeliveryCrowdsale_$449",
                "typeString": "contract PostDeliveryCrowdsale"
              }
            },
            "id": 8,
            "nodeType": "InheritanceSpecifier",
            "src": "496:21:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9,
              "name": "AllowanceCrowdsale",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 508,
              "src": "523:18:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AllowanceCrowdsale_$508",
                "typeString": "contract AllowanceCrowdsale"
              }
            },
            "id": 10,
            "nodeType": "InheritanceSpecifier",
            "src": "523:18:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11,
              "name": "IndividuallyCappedCrowdsale",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 717,
              "src": "547:27:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IndividuallyCappedCrowdsale_$717",
                "typeString": "contract IndividuallyCappedCrowdsale"
              }
            },
            "id": 12,
            "nodeType": "InheritanceSpecifier",
            "src": "547:27:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 13,
              "name": "CappedCrowdsale",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 570,
              "src": "580:15:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CappedCrowdsale_$570",
                "typeString": "contract CappedCrowdsale"
              }
            },
            "id": 14,
            "nodeType": "InheritanceSpecifier",
            "src": "580:15:0"
          }
        ],
        "contractDependencies": [
          332,
          449,
          508,
          570,
          717,
          804,
          984
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 108,
        "linearizedBaseContracts": [
          108,
          570,
          717,
          984,
          508,
          449,
          804,
          332
        ],
        "name": "TokenSale",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 46,
              "nodeType": "Block",
              "src": "885:2:0",
              "statements": []
            },
            "documentation": null,
            "id": 47,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 31,
                    "name": "_rate",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16,
                    "src": "756:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 32,
                    "name": "_wallet",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18,
                    "src": "763:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 33,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20,
                    "src": "772:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1027",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 34,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 30,
                  "name": "Crowdsale",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 332,
                  "src": "746:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Crowdsale_$332_$",
                    "typeString": "type(contract Crowdsale)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "746:33:0"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 36,
                    "name": "_tokenWallet",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 22,
                    "src": "803:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 37,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 35,
                  "name": "AllowanceCrowdsale",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 508,
                  "src": "784:18:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_AllowanceCrowdsale_$508_$",
                    "typeString": "type(contract AllowanceCrowdsale)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "784:32:0"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 39,
                    "name": "_cap",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24,
                    "src": "837:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 40,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 38,
                  "name": "CappedCrowdsale",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 570,
                  "src": "821:15:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_CappedCrowdsale_$570_$",
                    "typeString": "type(contract CappedCrowdsale)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "821:21:0"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 42,
                    "name": "_startTime",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 26,
                    "src": "863:10:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 43,
                    "name": "_endTime",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28,
                    "src": "875:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 44,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 41,
                  "name": "TimedCrowdsale",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 804,
                  "src": "847:14:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_TimedCrowdsale_$804_$",
                    "typeString": "type(contract TimedCrowdsale)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "847:37:0"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 29,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16,
                  "name": "_rate",
                  "nodeType": "VariableDeclaration",
                  "scope": 47,
                  "src": "615:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "615:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18,
                  "name": "_wallet",
                  "nodeType": "VariableDeclaration",
                  "scope": 47,
                  "src": "630:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "630:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 47,
                  "src": "647:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$1027",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1027,
                    "src": "647:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1027",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22,
                  "name": "_tokenWallet",
                  "nodeType": "VariableDeclaration",
                  "scope": 47,
                  "src": "661:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "661:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24,
                  "name": "_cap",
                  "nodeType": "VariableDeclaration",
                  "scope": 47,
                  "src": "683:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "683:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26,
                  "name": "_startTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 47,
                  "src": "697:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "697:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28,
                  "name": "_endTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 47,
                  "src": "717:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 27,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "717:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "614:120:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 45,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "885:0:0"
            },
            "scope": 108,
            "src": "603:284:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 58,
              "nodeType": "Block",
              "src": "953:31:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 56,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 54,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 117,
                      "src": "963:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$1027",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 55,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49,
                      "src": "971:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$1027",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "963:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1027",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 57,
                  "nodeType": "ExpressionStatement",
                  "src": "963:14:0"
                }
              ]
            },
            "documentation": null,
            "id": 59,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 52,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 51,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 932,
                  "src": "943:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "943:9:0"
              }
            ],
            "name": "changeTokenAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 50,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 59,
                  "src": "922:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$1027",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 48,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1027,
                    "src": "922:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1027",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "921:14:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 53,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "953:0:0"
            },
            "scope": 108,
            "src": "894:90:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 70,
              "nodeType": "Block",
              "src": "1053:33:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 68,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 66,
                      "name": "wallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 119,
                      "src": "1063:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 67,
                      "name": "_wallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61,
                      "src": "1072:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1063:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 69,
                  "nodeType": "ExpressionStatement",
                  "src": "1063:16:0"
                }
              ]
            },
            "documentation": null,
            "id": 71,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 64,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 63,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 932,
                  "src": "1043:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1043:9:0"
              }
            ],
            "name": "changeWalletAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 62,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61,
                  "name": "_wallet",
                  "nodeType": "VariableDeclaration",
                  "scope": 71,
                  "src": "1019:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 60,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1019:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1018:17:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 65,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1053:0:0"
            },
            "scope": 108,
            "src": "990:96:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 82,
              "nodeType": "Block",
              "src": "1144:29:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 80,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 78,
                      "name": "rate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 121,
                      "src": "1154:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 79,
                      "name": "_rate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 73,
                      "src": "1161:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1154:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 81,
                  "nodeType": "ExpressionStatement",
                  "src": "1154:12:0"
                }
              ]
            },
            "documentation": null,
            "id": 83,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 76,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 75,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 932,
                  "src": "1134:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1134:9:0"
              }
            ],
            "name": "changeRate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 74,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 73,
                  "name": "_rate",
                  "nodeType": "VariableDeclaration",
                  "scope": 83,
                  "src": "1112:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 72,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1112:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1111:15:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 77,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1144:0:0"
            },
            "scope": 108,
            "src": "1092:81:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 94,
              "nodeType": "Block",
              "src": "1229:27:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 92,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 90,
                      "name": "cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 519,
                      "src": "1239:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 91,
                      "name": "_cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 85,
                      "src": "1245:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1239:10:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 93,
                  "nodeType": "ExpressionStatement",
                  "src": "1239:10:0"
                }
              ]
            },
            "documentation": null,
            "id": 95,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 88,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 87,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 932,
                  "src": "1219:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1219:9:0"
              }
            ],
            "name": "changeCap",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 86,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 85,
                  "name": "_cap",
                  "nodeType": "VariableDeclaration",
                  "scope": 95,
                  "src": "1198:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 84,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1198:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1197:14:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 89,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1229:0:0"
            },
            "scope": 108,
            "src": "1179:77:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 106,
              "nodeType": "Block",
              "src": "1328:43:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 102,
                      "name": "tokenWallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 461,
                      "src": "1338:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 103,
                      "name": "_tokenWallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 97,
                      "src": "1352:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1338:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 105,
                  "nodeType": "ExpressionStatement",
                  "src": "1338:26:0"
                }
              ]
            },
            "documentation": null,
            "id": 107,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 100,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 99,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 932,
                  "src": "1318:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1318:9:0"
              }
            ],
            "name": "changeTokenWallet",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 98,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 97,
                  "name": "_tokenWallet",
                  "nodeType": "VariableDeclaration",
                  "scope": 107,
                  "src": "1289:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 96,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1289:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1288:22:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 101,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1328:0:0"
            },
            "scope": 108,
            "src": "1262:109:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 109,
        "src": "470:903:0"
      }
    ],
    "src": "0:1374:0"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-11-10T14:10:33.203Z"
}