[
  {
    "path": ".gitignore",
    "content": ".DS_Store\nnode_modules/\nbuild/\n"
  },
  {
    "path": "chapter-10+11/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2018 Truffle\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "chapter-10+11/client/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/build\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "chapter-10+11/client/README.md",
    "content": "This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).\n\n## Available Scripts\n\nIn the project directory, you can run:\n\n### `npm start`\n\nRuns the app in the development mode.<br>\nOpen [http://localhost:3000](http://localhost:3000) to view it in the browser.\n\nThe page will reload if you make edits.<br>\nYou will also see any lint errors in the console.\n\n### `npm test`\n\nLaunches the test runner in the interactive watch mode.<br>\nSee the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.\n\n### `npm run build`\n\nBuilds the app for production to the `build` folder.<br>\nIt correctly bundles React in production mode and optimizes the build for the best performance.\n\nThe build is minified and the filenames include the hashes.<br>\nYour app is ready to be deployed!\n\nSee the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.\n\n### `npm run eject`\n\n**Note: this is a one-way operation. Once you `eject`, you can’t go back!**\n\nIf you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.\n\nInstead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.\n\nYou don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.\n\n## Learn More\n\nYou can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).\n\nTo learn React, check out the [React documentation](https://reactjs.org/).\n"
  },
  {
    "path": "chapter-10+11/client/package.json",
    "content": "{\n  \"name\": \"client\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@material-ui/core\": \"^4.3.1\",\n    \"@openzeppelin/contracts\": \"^2.3.0\",\n    \"bootstrap\": \"^4.3.1\",\n    \"cryptocompare\": \"^1.0.0\",\n    \"get-eth-price\": \"^1.0.0\",\n    \"normalize.css\": \"^8.0.1\",\n    \"react\": \"^16.8.0\",\n    \"react-bootstrap\": \"^1.0.0-beta.10\",\n    \"react-dom\": \"^16.9.0\",\n    \"react-redux\": \"^7.1.1\",\n    \"react-router-dom\": \"^5.0.1\",\n    \"react-scripts\": \"2.1.1\",\n    \"redux\": \"^4.0.4\",\n    \"web3\": \"^1.2.1\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\"\n  },\n  \"eslintConfig\": {\n    \"extends\": \"react-app\"\n  },\n  \"browserslist\": [\n    \">0.2%\",\n    \"not dead\",\n    \"not ie <= 11\",\n    \"not op_mini all\"\n  ]\n}\n"
  },
  {
    "path": "chapter-10+11/client/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <link rel=\"shortcut icon\" href=\"%PUBLIC_URL%/favicon.ico\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <meta name=\"theme-color\" content=\"#000000\">\n    <!--\n      manifest.json provides metadata used when your web app is added to the\n      homescreen on Android. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\">\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>React App</title>\n  </head>\n  <body>\n    <noscript>\n      You need to enable JavaScript to run this app.\n    </noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "chapter-10+11/client/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "chapter-10+11/client/src/App.css",
    "content": "body {\n  margin: 0 !important;\n}\n\n.App {\n  text-align: center;\n}\n\n.donation-input-container {\n  display: flex;\n}\n\n.withdrawal-button {\n  margin-left: 10px;\n}\n\n.receipt-header {\n  border-bottom: 1px solid gray;\n}\n\n.receipt-container {\n  text-align: center;\n}\n\n.receipt-info {\n  display: flex;\n  padding: 50px;\n  justify-content: space-between;\n}\n\n.donation-receipt-link {\n  color: inherit;\n  text-decoration: none;\n}\n\n.main-container {\n  margin: 20px;\n}\n\n.donation-list {\n  margin-top: 10px;\n  margin-bottom: 10px;\n  display: flex;\n  justify-content: space-between;\n}\n\n.fundraiser-card-container {\n  display: inline-flex;\n  width: 250px;\n  height: 250px;\n  margin: 20px;\n}\n\n.MuiTextField-root {\n  display: block !important;\n}\n\n.MuiInputBase-root {\n  width: 300px !important;\n  margin-left: 3px;\n}\n\n.App-logo {\n  animation: App-logo-spin infinite 20s linear;\n  height: 40vmin;\n}\n\n.App-header {\n  background-color: #282c34;\n  min-height: 100vh;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  font-size: calc(10px + 2vmin);\n  color: white;\n}\n\n.App-link {\n  color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n.owner-actions-container {\n  button {\n    margin-left: 20px;\n  }\n}\n\n.nav-link {\n  color: inherit;\n  text-decoration: none;\n  margin-right: 15px;\n}\n\n.nav-link:hover,\n.nav-link:active,\n.nav-link:visited {\n  color: black;\n  text-decoration: none;\n}\n"
  },
  {
    "path": "chapter-10+11/client/src/App.js",
    "content": "\nimport React, { useState, useEffect } from \"react\";\nimport FactoryContract from \"./contracts/FundraiserFactory.json\";\nimport getWeb3 from \"./utils/getWeb3\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\nimport { BrowserRouter as Router, Route, NavLink } from \"react-router-dom\";\n\nimport NewFundraiser from './NewFundraiser'\nimport Home from './Home'\nimport Receipts from './Receipts'\n\nimport \"./App.css\";\n\nconst App = () => {\n  const [state, setState] = useState({web3: null, accounts: null, contract: null});\n\n  useEffect(() => {\n    const init = async() => {\n      try {\n        // Get network provider and web3 instance.\n        const web3 = await getWeb3();\n\n        // Use web3 to get the user's accounts.\n        const accounts = await web3.eth.getAccounts();\n\n        // Get the contract instance.\n        const networkId = await web3.eth.net.getId();\n        const deployedNetwork = FactoryContract.networks[networkId];\n        const instance = new web3.eth.Contract(\n          FactoryContract.abi,\n          deployedNetwork && deployedNetwork.address,\n        );\n\n        // Set web3, accounts, and contract to the state, and then proceed with an\n        setState({web3, accounts, contract: instance});\n\n      } catch(error) {\n        // Catch any errors for any of the above operations.\n        alert(\n          `Failed to load web3, accounts, or contract. Check console for details.`,\n        );\n        console.error(error);\n      }\n    }\n    init();\n  }, []);\n\n  const useStyles = makeStyles({\n    root: {\n      flexGrow: 1,\n    },\n  });\n\n  const runExample = async () => {\n    const { accounts, contract } = state;\n  };\n\n  return (\n    <div>\n      <Router>\n        <AppBar position=\"static\" color=\"default\" style={{ margin: 0 }}>\n          <Toolbar>\n           <Typography variant=\"h6\" color=\"inherit\">\n             <NavLink className=\"nav-link\" to=\"/\">Home</NavLink>\n           </Typography>\n           <NavLink className=\"nav-link\" to=\"/new/\">New</NavLink>\n          </Toolbar>\n       </AppBar>\n\n        <Route path=\"/\" exact component={Home} />\n        <Route path=\"/new/\" component={NewFundraiser} />\n        <Route path=\"/receipts\" component={Receipts} />\n      </Router>\n    </div>\n  )\n}\n\n\nexport default App;\n"
  },
  {
    "path": "chapter-10+11/client/src/App.test.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nit('renders without crashing', () => {\n  const div = document.createElement('div');\n  ReactDOM.render(<App />, div);\n  ReactDOM.unmountComponentAtNode(div);\n});\n"
  },
  {
    "path": "chapter-10+11/client/src/FundraiserCard.js",
    "content": "import React, { useEffect, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardMedia from '@material-ui/core/CardMedia';\nimport Button from '@material-ui/core/Button';\nimport Typography from '@material-ui/core/Typography';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\n\nimport FilledInput from '@material-ui/core/FilledInput';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\n\nimport getWeb3 from \"./utils/getWeb3\";\nimport FundraiserContract from \"./contracts/Fundraiser.json\";\nimport Web3 from 'web3'\n\nimport { Link } from 'react-router-dom'\n\nconst cc = require('cryptocompare')\n\nconst getModalStyle =() => {\n  const top = 50;\n  const left = 50;\n\n  return {\n    top,\n    left,\n  };\n}\n\nconst useStyles = makeStyles(theme => ({\n  container: {\n    display: 'flex',\n    flexWrap: 'wrap',\n  },\n  formControl: {\n    margin: theme.spacing(1),\n    display: 'table-cell'\n  },\n  card: {\n    maxWidth: 450,\n    height: 400\n  },\n  media: {\n    height: 140,\n  },\n  paper: {\n    position: 'absolute',\n    width: 500,\n    backgroundColor: theme.palette.background.paper,\n    border: 'none',\n    boxShadow: 'none',\n    padding: 4,\n  },\n}));\n\nconst FundraiserCard = (props) => {\n  const web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'))\n\n  const [ contract, setContract] = useState(null)\n  const [ accounts, setAccounts ] = useState(null)\n  const [ fund, setFundraiser ] = useState(null)\n  const [ fundName, setFundname ] = useState(null)\n  const [ description, setDescription ] = useState(null)\n  const [ totalDonations, setTotalDonations ] = useState(null)\n  const [ imageURL, setImageURL ] = useState(null)\n  const [ url, setURL ] = useState(null)\n  const [ open, setOpen] = React.useState(false);\n  const [ donationAmount, setDonationAmount] = useState(null)\n  const [ exchangeRate, setExchangeRate ] = useState(null)\n  const [ userDonations, setUserDonations ] = useState(null)\n  const [ isOwner, setIsOwner ] = useState(false)\n  const [ beneficiary, setNewBeneficiary ] = useState('')\n\n  const ethAmount = (donationAmount / exchangeRate || 0).toFixed(4)\n\n  const { fundraiser } = props\n\n  const classes = useStyles();\n\n  useEffect(() => {\n    if (fundraiser) {\n      init(fundraiser)\n    }\n  }, [fundraiser]);\n\n  const init = async (fundraiser) => {\n    try {\n      const fund = fundraiser\n      const networkId = await web3.eth.net.getId();\n      const deployedNetwork = FundraiserContract.networks[networkId];\n      const accounts = await web3.eth.getAccounts();\n      const instance = new web3.eth.Contract(\n        FundraiserContract.abi,\n        fund\n      );\n      setContract(instance)\n      setAccounts(accounts)\n\n      const name = await instance.methods.name().call()\n      const description = await instance.methods.description().call()\n      const totalDonations = await instance.methods.totalDonations().call()\n      const imageURL = await instance.methods.imageURL().call()\n      const url = await instance.methods.url().call()\n\n      const exchangeRate = await cc.price('ETH', ['USD'])\n      setExchangeRate(exchangeRate.USD)\n      const eth = web3.utils.fromWei(totalDonations, 'ether')\n      const dollarDonationAmount = exchangeRate.USD * eth\n\n      setTotalDonations(dollarDonationAmount.toFixed(2))\n      setFundname(name)\n      setDescription(description)\n      setImageURL(imageURL)\n      setURL(url)\n\n      const userDonations = await instance.methods.myDonations().call({ from: accounts[0]})\n      console.log(userDonations)\n      setUserDonations(userDonations)\n\n      const isUser = accounts[0]\n      const isOwner = await instance.methods.owner().call()\n\n      if (isOwner === accounts[0]) {\n        setIsOwner(true)\n      }\n    }\n    catch(error) {\n      alert(\n        `Failed to load web3, accounts, or contract. Check console for details.`,\n      );\n      console.error(error);\n    }\n  }\n\n  window.ethereum.on('accountsChanged', function (accounts) {\n    window.location.reload()\n  })\n\n  const handleOpen = () => {\n    setOpen(true);\n  };\n\n  const handleClose = () => {\n    setOpen(false);\n  };\n\n  const submitFunds = async () => {\n    const fundraisercontract = contract\n    const ethRate = exchangeRate\n    const ethTotal = donationAmount / ethRate\n    const donation = web3.utils.toWei(ethTotal.toString())\n\n    await contract.methods.donate().send({\n      from: accounts[0],\n      value: donation,\n      gas: 650000\n    })\n    setOpen(false);\n  }\n\n  const renderDonationsList = () => {\n    var donations = userDonations\n    if (donations === null) {return null}\n\n    const totalDonations = donations.values.length\n    let donationList = []\n    var i\n    for (i = 0; i < totalDonations; i++) {\n      const ethAmount = web3.utils.fromWei(donations.values[i])\n      const userDonation = exchangeRate * ethAmount\n      const donationDate = donations.dates[i]\n      donationList.push({ donationAmount: userDonation.toFixed(2), date: donationDate})\n    }\n\n    return donationList.map((donation) => {\n      return (\n        <div className=\"donation-list\">\n          <p>${donation.donationAmount}</p>\n\n          <Button variant=\"contained\" color=\"primary\">\n            <Link className=\"donation-receipt-link\" to={{ pathname: '/receipts', state: { fund: fundName, donation: donation.donationAmount, date: donation.date} }}>\n              Request Receipt\n            </Link>\n          </Button>\n        </div>\n      )\n    })\n  }\n\n  const withdrawalFunds = async () => {\n    await contract.methods.withdraw().send({\n      from: accounts[0],\n    })\n\n    alert('Funds Withdrawn!')\n  }\n\n  const setBeneficiary = async () => {\n    await contract.methods.setBeneficiary(beneficiary).send({\n      from: accounts[0],\n    })\n\n    alert(`Fundraiser Beneficiary Changed`)\n  }\n\n  return (\n    <div className=\"fundraiser-card-container\">\n    <Dialog open={open} onClose={handleClose} aria-labelledby=\"form-dialog-title\">\n    <DialogTitle id=\"form-dialog-title\">\n      Donate to {fundName}\n    </DialogTitle>\n      <DialogContent>\n        <DialogContentText>\n          <img src={imageURL} width='200px' height='200px' />\n          <p>{description}</p>\n\n          <div className=\"donation-input-container\">\n            <FormControl className={classes.formControl}>\n              $\n              <Input\n                id=\"component-simple\"\n                value={donationAmount}\n                onChange={(e) => setDonationAmount(e.target.value)}\n                placeholder=\"0.00\"\n               />\n            </FormControl>\n\n            <p>Eth: {ethAmount}</p>\n          </div>\n\n          <Button onClick={submitFunds} variant=\"contained\" color=\"primary\">\n            Donate\n          </Button>\n\n          <div>\n            <h3>My donations</h3>\n            {renderDonationsList()}\n          </div>\n\n\n          {isOwner &&\n            <div>\n              <FormControl className={classes.formControl}>\n                Beneficiary:\n                <Input\n                  value={beneficiary}\n                  onChange={(e) => setNewBeneficiary(e.target.value)}\n                  placeholder=\"Set Beneficiary\"\n                 />\n              </FormControl>\n\n              <Button variant=\"contained\" style={{ marginTop: 20 }} color=\"primary\" onClick={setBeneficiary}>\n                Set Beneficiary\n              </Button>\n            </div>\n          }\n        </DialogContentText>\n      </DialogContent>\n      <DialogActions>\n        <Button onClick={handleClose} color=\"primary\">\n          Cancel\n        </Button>\n        {isOwner &&\n          <Button\n            variant=\"contained\"\n            color=\"primary\"\n            onClick={withdrawalFunds}\n          >\n            Withdrawal\n          </Button>\n        }\n      </DialogActions>\n    </Dialog>\n\n    <Card className={classes.card} onClick={handleOpen}>\n      <CardActionArea>\n        <CardMedia\n          className={classes.media}\n          image={imageURL}\n          title=\"Fundraiser Image\"\n        />\n        <CardContent>\n          <Typography gutterBottom variant=\"h5\" component=\"h2\">\n            {fundName}\n          </Typography>\n          <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n            <p>{description}</p>\n            <p>Total Donations: ${totalDonations}</p>\n          </Typography>\n        </CardContent>\n      </CardActionArea>\n      <CardActions>\n        <Button\n          onClick={handleOpen}\n          variant=\"contained\"\n          className={classes.button}>\n          View More\n        </Button>\n      </CardActions>\n    </Card>\n    </div>\n  )\n}\n\nexport default FundraiserCard;\n"
  },
  {
    "path": "chapter-10+11/client/src/Home.js",
    "content": "\nimport React, { useState, useEffect } from \"react\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport FundraiserCard from './FundraiserCard'\nimport getWeb3 from \"./utils/getWeb3\";\nimport FactoryContract from \"./contracts/FundraiserFactory.json\";\nimport Web3 from 'web3'\n\nconst useStyles = makeStyles(theme => ({\n  button: {\n    margin: theme.spacing(1),\n  },\n  input: {\n    display: 'none',\n  },\n}));\n\n\nconst Home = () => {\n  const [ contract, setContract] = useState(null)\n  const [ accounts, setAccounts ] = useState(null)\n  const [ funds, setFunds ] = useState([])\n  const web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'))\n\n  useEffect(() => {\n    init()\n  }, []);\n\n  const init = async () => {\n    try {\n      const networkId = await web3.eth.net.getId();\n      const deployedNetwork = FactoryContract.networks[networkId];\n      const accounts = await web3.eth.getAccounts();\n      const instance = new web3.eth.Contract(\n        FactoryContract.abi,\n        deployedNetwork && deployedNetwork.address,\n      );\n      setContract(instance)\n      setAccounts(accounts)\n\n      const funds = await instance.methods.fundraisers(10, 0).call()\n\n      setFunds(funds)\n    }\n    catch(error) {\n      alert(\n        `Failed to load web3, accounts, or contract. Check console for details.`,\n      );\n      console.error(error);\n    }\n  }\n\n  const displayFundraisers = () => {\n    return funds.map((fundraiser) => {\n      return (\n        <FundraiserCard\n          fundraiser={fundraiser}\n          key={fundraiser}\n        />\n      )\n    })\n  }\n\n  return (\n    <div className=\"main-container\">\n      {displayFundraisers()}\n    </div>\n  )\n}\n\nexport default Home;\n"
  },
  {
    "path": "chapter-10+11/client/src/NewFundraiser.js",
    "content": "\nimport React, { useState, useEffect } from \"react\";\nimport FormControl from '@material-ui/core/FormControl';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport TextField from '@material-ui/core/TextField';\nimport getWeb3 from \"./utils/getWeb3\";\nimport FactoryContract from \"./contracts/FundraiserFactory.json\";\nimport Web3 from 'web3'\n\nconst useStyles = makeStyles(theme => ({\n  container: {\n    display: 'flex',\n    flexWrap: 'wrap',\n  },\n  textField: {\n    marginLeft: theme.spacing(1),\n    marginRight: theme.spacing(1),\n  },\n  dense: {\n    marginTop: theme.spacing(2),\n  },\n  menu: {\n    width: 200,\n  },\n}));\n\nconst NewFundraiser = () => {\nconst [labelWidth, setLabelWidth] = React.useState(0);\nconst labelRef = React.useRef(null);\nconst classes = useStyles();\nconst [ web3, setWeb3 ] = useState(null)\n\nuseEffect(() => {\n  const init = async() => {\n    try {\n      const web3 = await getWeb3();\n      const networkId = await web3.eth.net.getId();\n      const deployedNetwork = FactoryContract.networks[networkId];\n      const accounts = await web3.eth.getAccounts();\n      const instance = new web3.eth.Contract(\n        FactoryContract.abi,\n        deployedNetwork && deployedNetwork.address,\n      );\n\n      setWeb3(web3)\n      setContract(instance)\n      setAccounts(accounts)\n\n    } catch(error) {\n      alert(\n        `Failed to load web3, accounts, or contract. Check console for details.`,\n      );\n      console.error(error);\n    }\n  }\n  init();\n}, []);\n\nconst [ name, setFundraiserName ] = useState(null)\nconst [ website, setFundraiserWebsite ] = useState(null)\nconst [ description, setFundraiserDescription ] = useState(null)\nconst [ image, setImage ] = useState(null)\nconst [ address, setAddress ] = useState(null)\nconst [ contract, setContract] = useState(null)\nconst [ accounts, setAccounts ] = useState(null)\n\nconst handleSubmit = async () => {\n  const imageURL = image\n  const url = website\n  const beneficiary = address\n  const currentUser = await web3.currentProvider.selectedAddress\n\n  const transaction = await contract.methods.createFundraiser(\n    name,\n    url,\n    imageURL,\n    description,\n    beneficiary\n  ).send({ from: accounts[0] })\n\n  alert('Successfully created fundraiser')\n}\n\n  return (\n    <div className=\"create-fundraiser-container\">\n      <h2>Create A New Fundraiser</h2>\n\n      <label>Name</label>\n      <TextField\n        id=\"outlined-bare\"\n        className={classes.textField}\n        placeholder=\"Fundraiser Name\"\n        margin=\"normal\"\n        onChange={(e) => setFundraiserName(e.target.value)}\n        variant=\"outlined\"\n        inputProps={{ 'aria-label': 'bare' }}\n      />\n\n      <label>Website</label>\n      <TextField\n        id=\"outlined-bare\"\n        className={classes.textField}\n        placeholder=\"Fundraiser Website\"\n        margin=\"normal\"\n        onChange={(e) => setFundraiserWebsite(e.target.value)}\n        variant=\"outlined\"\n        inputProps={{ 'aria-label': 'bare' }}\n      />\n\n      <label>Description</label>\n      <TextField\n        id=\"outlined-bare\"\n        className={classes.textField}\n        placeholder=\"Fundraiser Description\"\n        margin=\"normal\"\n        onChange={(e) => setFundraiserDescription(e.target.value)}\n        variant=\"outlined\"\n        inputProps={{ 'aria-label': 'bare' }}\n      />\n\n      <label>Image</label>\n      <TextField\n        id=\"outlined-bare\"\n        className={classes.textField}\n        placeholder=\"Fundraiser Image\"\n        margin=\"normal\"\n        onChange={(e) => setImage(e.target.value)}\n        variant=\"outlined\"\n        inputProps={{ 'aria-label': 'bare' }}\n      />\n\n      <label>Address</label>\n      <TextField\n        id=\"outlined-bare\"\n        className={classes.textField}\n        placeholder=\"Fundraiser Ethereum Address\"\n        margin=\"normal\"\n        onChange={(e) => setAddress(e.target.value)}\n        variant=\"outlined\"\n        inputProps={{ 'aria-label': 'bare' }}\n      />\n\n      <Button\n        onClick={handleSubmit}\n        variant=\"contained\"\n        className={classes.button}>\n        Submit\n      </Button>\n    </div>\n  )\n}\n\n\nexport default NewFundraiser;\n"
  },
  {
    "path": "chapter-10+11/client/src/Receipts.js",
    "content": "import React, { useState, useEffect } from \"react\";\n\nconst Receipts = (props) => {\n  const [ donation, setDonation ] = useState(null)\n  const [ fundName, setFundName ] = useState(null)\n  const [ date, setDate ] = useState(null)\n\n  useEffect(() => {\n    const { donation, date, fund } = props.location.state\n\n    const formattedDate = new Date(parseInt(date))\n\n    setDonation(donation)\n    setDate(formattedDate.toString())\n    setFundName(fund)\n  }, []);\n\n  return (\n    <div className=\"receipt-container\">\n      <div className=\"receipt-header\">\n        <h3>Thank you for your donation to {fundName}</h3>\n      </div>\n\n      <div className=\"receipt-info\">\n        <div>Date of Donation: {date}</div>\n        <div>Donation Value: ${donation}</div>\n      </div>\n    </div>\n  )\n}\n\nexport default Receipts;\n"
  },
  {
    "path": "chapter-10+11/client/src/contracts/Fundraiser.json",
    "content": "{\n  \"contractName\": \"Fundraiser\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"name\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"donationsCount\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"beneficiary\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"url\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"description\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"isOwner\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"imageURL\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"totalDonations\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"name\": \"_name\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"_url\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"_imageURL\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"_description\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"_beneficiary\",\n          \"type\": \"address\"\n        },\n        {\n          \"name\": \"_custodian\",\n          \"type\": \"address\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"payable\": true,\n      \"stateMutability\": \"payable\",\n      \"type\": \"fallback\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"name\": \"donor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DonationReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Withdraw\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"_beneficiary\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setBeneficiary\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"myDonationsCount\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [],\n      \"name\": \"donate\",\n      \"outputs\": [],\n      \"payable\": true,\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"myDonations\",\n      \"outputs\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"uint256[]\"\n        },\n        {\n          \"name\": \"dates\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [],\n      \"name\": \"withdraw\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"myDonationsCount\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"name\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"myDonations\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"values\\\",\\\"type\\\":\\\"uint256[]\\\"},{\\\"name\\\":\\\"dates\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"_beneficiary\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setBeneficiary\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"donationsCount\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"beneficiary\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"withdraw\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"url\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"description\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isOwner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"imageURL\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalDonations\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"donate\\\",\\\"outputs\\\":[],\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"name\\\":\\\"_name\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"_url\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"_imageURL\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"_description\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"_beneficiary\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"_custodian\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"fallback\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"donor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DonationReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Withdraw\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{\\\"isOwner()\\\":{\\\"details\\\":\\\"Returns true if the caller is the current owner.\\\"},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}}},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/Fundraiser.sol\\\":\\\"Fundraiser\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/Fundraiser.sol\\\":{\\\"keccak256\\\":\\\"0x4c71de6bd99f371b0ccbf390caa727bfe9429f7227ea476bef46921e7394235a\\\",\\\"urls\\\":[\\\"bzzr://e74b39014904a052c9d666edb293af447a25a9efe53b46489cbf6fa9f7c0e90e\\\"]},\\\"openzeppelin-solidity/contracts/math/SafeMath.sol\\\":{\\\"keccak256\\\":\\\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\\\",\\\"urls\\\":[\\\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\\\"]},\\\"openzeppelin-solidity/contracts/ownership/Ownable.sol\\\":{\\\"keccak256\\\":\\\"0xf79fb10e8235770eb4aea7249034076a3cc9f9119ad944fc48705bae9c9d20dc\\\",\\\"urls\\\":[\\\"bzzr://d12a11272051eb6586de8f7e0a82c04a98c9984ce8b2a6cf1ee439f65aba29a9\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523480156200001157600080fd5b506040516200174338038062001743833981018060405260c08110156200003757600080fd5b8101908080516401000000008111156200005057600080fd5b828101905060208101848111156200006757600080fd5b81518560018202830111640100000000821117156200008557600080fd5b50509291906020018051640100000000811115620000a257600080fd5b82810190506020810184811115620000b957600080fd5b8151856001820283011164010000000082111715620000d757600080fd5b50509291906020018051640100000000811115620000f457600080fd5b828101905060208101848111156200010b57600080fd5b81518560018202830111640100000000821117156200012957600080fd5b505092919060200180516401000000008111156200014657600080fd5b828101905060208101848111156200015d57600080fd5b81518560018202830111640100000000821117156200017b57600080fd5b50509291906020018051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a385600290805190602001906200026e9291906200045e565b508460039080519060200190620002879291906200045e565b508360049080519060200190620002a09291906200045e565b508260059080519060200190620002b99291906200045e565b5081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200030c816200031860201b60201c565b5050505050506200050d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620003a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806200171d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004a157805160ff1916838001178555620004d2565b82800160010185558215620004d2579182015b82811115620004d1578251825591602001919060010190620004b4565b5b509050620004e19190620004e5565b5090565b6200050a91905b8082111562000506576000816000905550600101620004ec565b5090565b90565b611200806200051d6000396000f3fe6080604052600436106100f35760003560e01c8063715018a61161008a578063b90497e011610059578063b90497e014610538578063de2ed893146105c8578063ed88c68e146105f3578063f2fde38b146105fd576100f3565b8063715018a61461040b5780637284e416146104225780638da5cb5b146104b25780638f32d59b14610509576100f3565b80631f522595116100c65780631f522595146102e257806338af3eed1461030d5780633ccfd60b146103645780635600f04f1461037b576100f3565b80630180b97c1461012257806306fdde031461014d5780631a57f7b4146101dd5780631c31f71014610291575b6101083460075461064e90919063ffffffff16565b600781905550600860008154809291906001019190505550005b34801561012e57600080fd5b506101376106d6565b6040518082815260200191505060405180910390f35b34801561015957600080fd5b50610162610720565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a2578082015181840152602081019050610187565b50505050905090810190601f1680156101cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101e957600080fd5b506101f26107be565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561023957808201518184015260208101905061021e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561027b578082015181840152602081019050610260565b5050505090500194505050505060405180910390f35b34801561029d57600080fd5b506102e0600480360360208110156102b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108ef565b005b3480156102ee57600080fd5b506102f76109ad565b6040518082815260200191505060405180910390f35b34801561031957600080fd5b506103226109b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561037057600080fd5b506103796109d9565b005b34801561038757600080fd5b50610390610b12565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103d05780820151818401526020810190506103b5565b50505050905090810190601f1680156103fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041757600080fd5b50610420610bb0565b005b34801561042e57600080fd5b50610437610ce9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047757808201518184015260208101905061045c565b50505050905090810190601f1680156104a45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104be57600080fd5b506104c7610d87565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561051557600080fd5b5061051e610db0565b604051808215151515815260200191505060405180910390f35b34801561054457600080fd5b5061054d610e07565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561058d578082015181840152602081019050610572565b50505050905090810190601f1680156105ba5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105d457600080fd5b506105dd610ea5565b6040518082815260200191505060405180910390f35b6105fb610eab565b005b34801561060957600080fd5b5061064c6004803603602081101561062057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fca565b005b6000808284019050838110156106cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905090565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107b65780601f1061078b576101008083540402835291602001916107b6565b820191906000526020600020905b81548152906001019060200180831161079957829003601f168201915b505050505081565b60608060006107cb6106d6565b9050806040519080825280602002602001820160405280156107fc5781602001602082028038833980820191505090505b5092508060405190808252806020026020018201604052801561082e5781602001602082028038833980820191505090505b50915060008090505b818110156108e3576000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061088b57fe5b9060005260206000209060020201905080600001548583815181106108ac57fe5b60200260200101818152505080600101548483815181106108c957fe5b602002602001018181525050508080600101915050610837565b50828292509250509091565b6108f7610db0565b610969576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109e1610db0565b610a53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff16319050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ad7573d6000803e3d6000fd5b507f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d816040518082815260200191505060405180910390a150565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ba85780601f10610b7d57610100808354040283529160200191610ba8565b820191906000526020600020905b815481529060010190602001808311610b8b57829003601f168201915b505050505081565b610bb8610db0565b610c2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d7f5780601f10610d5457610100808354040283529160200191610d7f565b820191906000526020600020905b815481529060010190602001808311610d6257829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e9d5780601f10610e7257610100808354040283529160200191610e9d565b820191906000526020600020905b815481529060010190602001808311610e8057829003601f168201915b505050505081565b60075481565b610eb3611194565b6040518060400160405280348152602001428152509050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505090600182039060005260206000209060020201600090919290919091506000820151816000015560208201518160010155505050610f613460075461064e90919063ffffffff16565b6007819055506008600081548092919060010191905055503373ffffffffffffffffffffffffffffffffffffffff167f264f630d9efa0d07053a31163641d9fcc0adafc9d9e76f1c37c2ce3a558d2c52346040518082815260200191505060405180910390a250565b610fd2610db0565b611044576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61104d81611050565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806111af6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60405180604001604052806000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a165627a7a723058209fbfa484628b02babb980313ae79b77e708df8b0c46024caff44504889d7641100294f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373\",\n  \"deployedBytecode\": \"0x6080604052600436106100f35760003560e01c8063715018a61161008a578063b90497e011610059578063b90497e014610538578063de2ed893146105c8578063ed88c68e146105f3578063f2fde38b146105fd576100f3565b8063715018a61461040b5780637284e416146104225780638da5cb5b146104b25780638f32d59b14610509576100f3565b80631f522595116100c65780631f522595146102e257806338af3eed1461030d5780633ccfd60b146103645780635600f04f1461037b576100f3565b80630180b97c1461012257806306fdde031461014d5780631a57f7b4146101dd5780631c31f71014610291575b6101083460075461064e90919063ffffffff16565b600781905550600860008154809291906001019190505550005b34801561012e57600080fd5b506101376106d6565b6040518082815260200191505060405180910390f35b34801561015957600080fd5b50610162610720565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a2578082015181840152602081019050610187565b50505050905090810190601f1680156101cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101e957600080fd5b506101f26107be565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561023957808201518184015260208101905061021e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561027b578082015181840152602081019050610260565b5050505090500194505050505060405180910390f35b34801561029d57600080fd5b506102e0600480360360208110156102b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108ef565b005b3480156102ee57600080fd5b506102f76109ad565b6040518082815260200191505060405180910390f35b34801561031957600080fd5b506103226109b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561037057600080fd5b506103796109d9565b005b34801561038757600080fd5b50610390610b12565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103d05780820151818401526020810190506103b5565b50505050905090810190601f1680156103fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041757600080fd5b50610420610bb0565b005b34801561042e57600080fd5b50610437610ce9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047757808201518184015260208101905061045c565b50505050905090810190601f1680156104a45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104be57600080fd5b506104c7610d87565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561051557600080fd5b5061051e610db0565b604051808215151515815260200191505060405180910390f35b34801561054457600080fd5b5061054d610e07565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561058d578082015181840152602081019050610572565b50505050905090810190601f1680156105ba5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105d457600080fd5b506105dd610ea5565b6040518082815260200191505060405180910390f35b6105fb610eab565b005b34801561060957600080fd5b5061064c6004803603602081101561062057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fca565b005b6000808284019050838110156106cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905090565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107b65780601f1061078b576101008083540402835291602001916107b6565b820191906000526020600020905b81548152906001019060200180831161079957829003601f168201915b505050505081565b60608060006107cb6106d6565b9050806040519080825280602002602001820160405280156107fc5781602001602082028038833980820191505090505b5092508060405190808252806020026020018201604052801561082e5781602001602082028038833980820191505090505b50915060008090505b818110156108e3576000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061088b57fe5b9060005260206000209060020201905080600001548583815181106108ac57fe5b60200260200101818152505080600101548483815181106108c957fe5b602002602001018181525050508080600101915050610837565b50828292509250509091565b6108f7610db0565b610969576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109e1610db0565b610a53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff16319050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ad7573d6000803e3d6000fd5b507f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d816040518082815260200191505060405180910390a150565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ba85780601f10610b7d57610100808354040283529160200191610ba8565b820191906000526020600020905b815481529060010190602001808311610b8b57829003601f168201915b505050505081565b610bb8610db0565b610c2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d7f5780601f10610d5457610100808354040283529160200191610d7f565b820191906000526020600020905b815481529060010190602001808311610d6257829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e9d5780601f10610e7257610100808354040283529160200191610e9d565b820191906000526020600020905b815481529060010190602001808311610e8057829003601f168201915b505050505081565b60075481565b610eb3611194565b6040518060400160405280348152602001428152509050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505090600182039060005260206000209060020201600090919290919091506000820151816000015560208201518160010155505050610f613460075461064e90919063ffffffff16565b6007819055506008600081548092919060010191905055503373ffffffffffffffffffffffffffffffffffffffff167f264f630d9efa0d07053a31163641d9fcc0adafc9d9e76f1c37c2ce3a558d2c52346040518082815260200191505060405180910390a250565b610fd2610db0565b611044576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61104d81611050565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806111af6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60405180604001604052806000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a165627a7a723058209fbfa484628b02babb980313ae79b77e708df8b0c46024caff44504889d764110029\",\n  \"sourceMap\": \"158:2312:0:-;;;679:420;8:9:-1;5:2;;;30:1;27;20:12;5:2;679:420:0;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;679:420:0;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;679:420:0;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;679:420:0;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;679:420:0;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;679:420:0;;;;;;;;;;;;;;;;;;;;;;;;;;666:10:4;657:6;;:19;;;;;;;;;;;;;;;;;;724:6;;;;;;;;;;;691:40;;720:1;691:40;;;;;;;;;;;;925:5:0;918:4;:12;;;;;;;;;;;;:::i;:::-;;946:4;940:3;:10;;;;;;;;;;;;:::i;:::-;;971:9;960:8;:20;;;;;;;;;;;;:::i;:::-;;1004:12;990:11;:26;;;;;;;;;;;;:::i;:::-;;1040:12;1026:11;;:26;;;;;;;;;;;;;;;;;;1062:30;1081:10;1062:18;;;:30;;:::i;:::-;679:420;;;;;;158:2312;;2093:225:4;2186:1;2166:22;;:8;:22;;;;2158:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2275:8;2246:38;;2267:6;;;;;;;;;;;2246:38;;;;;;;;;;;;2303:8;2294:6;;:17;;;;;;;;;;;;;;;;;;2093:225;:::o;158:2312:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;\",\n  \"deployedSourceMap\": \"158:2312:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2406:29;2425:9;2406:14;;:18;;:29;;;;:::i;:::-;2389:14;:46;;;;2445:14;;:16;;;;;;;;;;;;;158:2312;1225:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1225:110:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;460:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;460:18:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;460:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1693:481;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1693:481:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1693:481:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1693:481:0;;;;;;;;;;;;;;;;;;;1105:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1105:114:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1105:114:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;643:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;643:29:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;567:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;567:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2180:164;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2180:164:0;;;:::i;:::-;;484:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;484:17:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;484:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1599:137:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1599:137:4;;;:::i;:::-;;535:25:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;535:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;535:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;814:77:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;814:77:4;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1165:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1165:90:4;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;507:22:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;507:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;507:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;608:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;608:29:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1341:346;;;:::i;:::-;;1885:107:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1885:107:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1885:107:4;;;;;;;;;;;;;;;;;;;:::i;:::-;;834:176:3;892:7;911:9;927:1;923;:5;911:17;;951:1;946;:6;;938:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;995:8;;;834:176;;;;:::o;1225:110:0:-;1273:7;1299:10;:22;1310:10;1299:22;;;;;;;;;;;;;;;:29;;;;1292:36;;1225:110;:::o;460:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1693:481::-;1745:23;1778:22;1821:13;1837:18;:16;:18::i;:::-;1821:34;;1888:5;1874:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;1874:20:0;;;;1865:29;;1926:5;1912:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;1912:20:0;;;;1904:28;;1948:9;1960:1;1948:13;;1943:192;1967:5;1963:1;:9;1943:192;;;1993:25;2021:10;:22;2032:10;2021:22;;;;;;;;;;;;;;;2044:1;2021:25;;;;;;;;;;;;;;;;;;1993:53;;2072:8;:14;;;2060:6;2067:1;2060:9;;;;;;;;;;;;;:26;;;;;2111:8;:13;;;2100:5;2106:1;2100:8;;;;;;;;;;;;;:24;;;;;1943:192;1974:3;;;;;;;1943:192;;;;2153:6;2161:5;2145:22;;;;;1693:481;;:::o;1105:114::-;1018:9:4;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1200:12:0;1186:11;;:26;;;;;;;;;;;;;;;;;;1105:114;:::o;643:29::-;;;;:::o;567:34::-;;;;;;;;;;;;;:::o;2180:164::-;1018:9:4;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2227:15:0;2253:4;2245:21;;;2227:39;;2276:11;;;;;;;;;;;:20;;:29;2297:7;2276:29;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2276:29:0;2320:17;2329:7;2320:17;;;;;;;;;;;;;;;;;;1074:1:4;2180:164:0:o;484:17::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1599:137:4:-;1018:9;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1697:1;1660:40;;1681:6;;;;;;;;;;;1660:40;;;;;;;;;;;;1727:1;1710:6;;:19;;;;;;;;;;;;;;;;;;1599:137::o;535:25:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;814:77:4:-;852:7;878:6;;;;;;;;;;;871:13;;814:77;:::o;1165:90::-;1205:4;1242:6;;;;;;;;;;;1228:20;;:10;:20;;;1221:27;;1165:90;:::o;507:22:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;608:29::-;;;;:::o;1341:346::-;1384:24;;:::i;:::-;1411:85;;;;;;;;1441:9;1411:85;;;;1470:15;1411:85;;;1384:112;;1506:10;:22;1517:10;1506:22;;;;;;;;;;;;;;;1534:8;1506:37;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;1506:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1570:29;1589:9;1570:14;;:18;;:29;;;;:::i;:::-;1553:14;:46;;;;1609:14;;:16;;;;;;;;;;;;;1658:10;1641:39;;;1670:9;1641:39;;;;;;;;;;;;;;;;;;1341:346;:::o;1885:107:4:-;1018:9;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1957:28;1976:8;1957:18;:28::i;:::-;1885:107;:::o;2093:225::-;2186:1;2166:22;;:8;:22;;;;2158:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2275:8;2246:38;;2267:6;;;;;;;;;;;2246:38;;;;;;;;;;;;2303:8;2294:6;;:17;;;;;;;;;;;;;;;;;;2093:225;:::o;158:2312:0:-;;;;;;;;;;;;;;;;;;;:::o\",\n  \"source\": \"pragma solidity >0.4.23 <0.7.0;\\n\\nimport \\\"openzeppelin-solidity/contracts/ownership/Ownable.sol\\\";\\nimport \\\"openzeppelin-solidity/contracts/math/SafeMath.sol\\\";\\n\\ncontract Fundraiser is Ownable {\\n    using SafeMath for uint256;\\n\\n    struct Donation {\\n        uint256 value;\\n        uint256 date;\\n    }\\n    mapping(address => Donation[]) private _donations;\\n\\n    event DonationReceived(address indexed donor, uint256 value);\\n    event Withdraw(uint256 amount);\\n\\n    string public name;\\n    string public url;\\n    string public imageURL;\\n    string public description;\\n\\n    address payable public beneficiary;\\n\\n    uint256 public totalDonations;\\n    uint256 public donationsCount;\\n\\n    constructor(\\n        string memory _name,\\n        string memory _url,\\n        string memory _imageURL,\\n        string memory _description,\\n        address payable _beneficiary,\\n        address _custodian\\n    )\\n        public\\n    {\\n        name = _name;\\n        url = _url;\\n        imageURL = _imageURL;\\n        description = _description;\\n        beneficiary = _beneficiary;\\n        _transferOwnership(_custodian);\\n    }\\n\\n    function setBeneficiary(address payable _beneficiary) public onlyOwner {\\n        beneficiary = _beneficiary;\\n    }\\n\\n    function myDonationsCount() public view returns(uint256) {\\n        return _donations[msg.sender].length;\\n    }\\n\\n    function donate() public payable {\\n        Donation memory donation = Donation({\\n            value: msg.value,\\n            date: block.timestamp\\n        });\\n        _donations[msg.sender].push(donation);\\n        totalDonations = totalDonations.add(msg.value);\\n        donationsCount++;\\n\\n        emit DonationReceived(msg.sender, msg.value);\\n    }\\n\\n    function myDonations() public view returns(\\n        uint256[] memory values,\\n        uint256[] memory dates\\n    )\\n    {\\n        uint256 count = myDonationsCount();\\n        values = new uint256[](count);\\n        dates = new uint256[](count);\\n\\n        for (uint256 i = 0; i < count; i++) {\\n            Donation storage donation = _donations[msg.sender][i];\\n            values[i] = donation.value;\\n            dates[i] = donation.date;\\n        }\\n\\n        return (values, dates);\\n    }\\n\\n    function withdraw() public onlyOwner {\\n        uint256 balance = address(this).balance;\\n        beneficiary.transfer(balance);\\n        emit Withdraw(balance);\\n    }\\n\\n    function () external payable {\\n        totalDonations = totalDonations.add(msg.value);\\n        donationsCount++;\\n    }\\n}\\n\",\n  \"sourcePath\": \"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/Fundraiser.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/Fundraiser.sol\",\n    \"exportedSymbols\": {\n      \"Fundraiser\": [\n        254\n      ]\n    },\n    \"id\": 255,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 1,\n        \"literals\": [\n          \"solidity\",\n          \">\",\n          \"0.4\",\n          \".23\",\n          \"<\",\n          \"0.7\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:31:0\"\n      },\n      {\n        \"absolutePath\": \"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\n        \"file\": \"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\n        \"id\": 2,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 255,\n        \"sourceUnit\": 696,\n        \"src\": \"33:63:0\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"openzeppelin-solidity/contracts/math/SafeMath.sol\",\n        \"file\": \"openzeppelin-solidity/contracts/math/SafeMath.sol\",\n        \"id\": 3,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 255,\n        \"sourceUnit\": 585,\n        \"src\": \"97:59:0\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 4,\n              \"name\": \"Ownable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 695,\n              \"src\": \"181:7:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_Ownable_$695\",\n                \"typeString\": \"contract Ownable\"\n              }\n            },\n            \"id\": 5,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"181:7:0\"\n          }\n        ],\n        \"contractDependencies\": [\n          695\n        ],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 254,\n        \"linearizedBaseContracts\": [\n          254,\n          695\n        ],\n        \"name\": \"Fundraiser\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"id\": 8,\n            \"libraryName\": {\n              \"contractScope\": null,\n              \"id\": 6,\n              \"name\": \"SafeMath\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 584,\n              \"src\": \"201:8:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_SafeMath_$584\",\n                \"typeString\": \"library SafeMath\"\n              }\n            },\n            \"nodeType\": \"UsingForDirective\",\n            \"src\": \"195:27:0\",\n            \"typeName\": {\n              \"id\": 7,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"214:7:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            }\n          },\n          {\n            \"canonicalName\": \"Fundraiser.Donation\",\n            \"id\": 13,\n            \"members\": [\n              {\n                \"constant\": false,\n                \"id\": 10,\n                \"name\": \"value\",\n                \"nodeType\": \"VariableDeclaration\",\n                \"scope\": 13,\n                \"src\": \"254:13:0\",\n                \"stateVariable\": false,\n                \"storageLocation\": \"default\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_uint256\",\n                  \"typeString\": \"uint256\"\n                },\n                \"typeName\": {\n                  \"id\": 9,\n                  \"name\": \"uint256\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"254:7:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  }\n                },\n                \"value\": null,\n                \"visibility\": \"internal\"\n              },\n              {\n                \"constant\": false,\n                \"id\": 12,\n                \"name\": \"date\",\n                \"nodeType\": \"VariableDeclaration\",\n                \"scope\": 13,\n                \"src\": \"277:12:0\",\n                \"stateVariable\": false,\n                \"storageLocation\": \"default\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_uint256\",\n                  \"typeString\": \"uint256\"\n                },\n                \"typeName\": {\n                  \"id\": 11,\n                  \"name\": \"uint256\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"277:7:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  }\n                },\n                \"value\": null,\n                \"visibility\": \"internal\"\n              }\n            ],\n            \"name\": \"Donation\",\n            \"nodeType\": \"StructDefinition\",\n            \"scope\": 254,\n            \"src\": \"228:68:0\",\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 18,\n            \"name\": \"_donations\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"301:49:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$13_storage_$dyn_storage_$\",\n              \"typeString\": \"mapping(address => struct Fundraiser.Donation[])\"\n            },\n            \"typeName\": {\n              \"id\": 17,\n              \"keyType\": {\n                \"id\": 14,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"309:7:0\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"301:30:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$13_storage_$dyn_storage_$\",\n                \"typeString\": \"mapping(address => struct Fundraiser.Donation[])\"\n              },\n              \"valueType\": {\n                \"baseType\": {\n                  \"contractScope\": null,\n                  \"id\": 15,\n                  \"name\": \"Donation\",\n                  \"nodeType\": \"UserDefinedTypeName\",\n                  \"referencedDeclaration\": 13,\n                  \"src\": \"320:8:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_struct$_Donation_$13_storage_ptr\",\n                    \"typeString\": \"struct Fundraiser.Donation\"\n                  }\n                },\n                \"id\": 16,\n                \"length\": null,\n                \"nodeType\": \"ArrayTypeName\",\n                \"src\": \"320:10:0\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_array$_t_struct$_Donation_$13_storage_$dyn_storage_ptr\",\n                  \"typeString\": \"struct Fundraiser.Donation[]\"\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 24,\n            \"name\": \"DonationReceived\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 23,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 20,\n                  \"indexed\": true,\n                  \"name\": \"donor\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 24,\n                  \"src\": \"380:21:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"380:7:0\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 22,\n                  \"indexed\": false,\n                  \"name\": \"value\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 24,\n                  \"src\": \"403:13:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 21,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"403:7:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"379:38:0\"\n            },\n            \"src\": \"357:61:0\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 28,\n            \"name\": \"Withdraw\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 27,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 26,\n                  \"indexed\": false,\n                  \"name\": \"amount\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 28,\n                  \"src\": \"438:14:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 25,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"438:7:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"437:16:0\"\n            },\n            \"src\": \"423:31:0\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 30,\n            \"name\": \"name\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"460:18:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 29,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"460:6:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 32,\n            \"name\": \"url\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"484:17:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 31,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"484:6:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 34,\n            \"name\": \"imageURL\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"507:22:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 33,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"507:6:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 36,\n            \"name\": \"description\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"535:25:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 35,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"535:6:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 38,\n            \"name\": \"beneficiary\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"567:34:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address_payable\",\n              \"typeString\": \"address payable\"\n            },\n            \"typeName\": {\n              \"id\": 37,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"567:15:0\",\n              \"stateMutability\": \"payable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address_payable\",\n                \"typeString\": \"address payable\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 40,\n            \"name\": \"totalDonations\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"608:29:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 39,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"608:7:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 42,\n            \"name\": \"donationsCount\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"643:29:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 41,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"643:7:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 81,\n              \"nodeType\": \"Block\",\n              \"src\": \"908:191:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 59,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 57,\n                      \"name\": \"name\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 30,\n                      \"src\": \"918:4:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 58,\n                      \"name\": \"_name\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 44,\n                      \"src\": \"925:5:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"918:12:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 60,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"918:12:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 63,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 61,\n                      \"name\": \"url\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 32,\n                      \"src\": \"940:3:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 62,\n                      \"name\": \"_url\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 46,\n                      \"src\": \"946:4:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"940:10:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 64,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"940:10:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 67,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 65,\n                      \"name\": \"imageURL\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 34,\n                      \"src\": \"960:8:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 66,\n                      \"name\": \"_imageURL\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 48,\n                      \"src\": \"971:9:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"960:20:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 68,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"960:20:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 71,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 69,\n                      \"name\": \"description\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 36,\n                      \"src\": \"990:11:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 70,\n                      \"name\": \"_description\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 50,\n                      \"src\": \"1004:12:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"990:26:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 72,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"990:26:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 75,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 73,\n                      \"name\": \"beneficiary\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 38,\n                      \"src\": \"1026:11:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 74,\n                      \"name\": \"_beneficiary\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 52,\n                      \"src\": \"1040:12:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"1026:26:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"id\": 76,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1026:26:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 78,\n                        \"name\": \"_custodian\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 54,\n                        \"src\": \"1081:10:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 77,\n                      \"name\": \"_transferOwnership\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 694,\n                      \"src\": \"1062:18:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address)\"\n                      }\n                    },\n                    \"id\": 79,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1062:30:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 80,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1062:30:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 82,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 55,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 44,\n                  \"name\": \"_name\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 82,\n                  \"src\": \"700:19:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 43,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"700:6:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 46,\n                  \"name\": \"_url\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 82,\n                  \"src\": \"729:18:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 45,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"729:6:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 48,\n                  \"name\": \"_imageURL\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 82,\n                  \"src\": \"757:23:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 47,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"757:6:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 50,\n                  \"name\": \"_description\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 82,\n                  \"src\": \"790:26:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 49,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"790:6:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 52,\n                  \"name\": \"_beneficiary\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 82,\n                  \"src\": \"826:28:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"typeName\": {\n                    \"id\": 51,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"826:15:0\",\n                    \"stateMutability\": \"payable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 54,\n                  \"name\": \"_custodian\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 82,\n                  \"src\": \"864:18:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"864:7:0\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"690:198:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 56,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"908:0:0\"\n            },\n            \"scope\": 254,\n            \"src\": \"679:420:0\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 93,\n              \"nodeType\": \"Block\",\n              \"src\": \"1176:43:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 91,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 89,\n                      \"name\": \"beneficiary\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 38,\n                      \"src\": \"1186:11:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 90,\n                      \"name\": \"_beneficiary\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 84,\n                      \"src\": \"1200:12:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"1186:26:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"id\": 92,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1186:26:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 94,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 87,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 86,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 628,\n                  \"src\": \"1166:9:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"1166:9:0\"\n              }\n            ],\n            \"name\": \"setBeneficiary\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 85,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 84,\n                  \"name\": \"_beneficiary\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 94,\n                  \"src\": \"1129:28:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"typeName\": {\n                    \"id\": 83,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1129:15:0\",\n                    \"stateMutability\": \"payable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1128:30:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 88,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1176:0:0\"\n            },\n            \"scope\": 254,\n            \"src\": \"1105:114:0\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 105,\n              \"nodeType\": \"Block\",\n              \"src\": \"1282:53:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 99,\n                        \"name\": \"_donations\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 18,\n                        \"src\": \"1299:10:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$13_storage_$dyn_storage_$\",\n                          \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                        }\n                      },\n                      \"id\": 102,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 100,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 710,\n                          \"src\": \"1310:3:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 101,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"sender\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1310:10:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"1299:22:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_struct$_Donation_$13_storage_$dyn_storage\",\n                        \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                      }\n                    },\n                    \"id\": 103,\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"length\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"1299:29:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 98,\n                  \"id\": 104,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1292:36:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 106,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"myDonationsCount\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 95,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1250:2:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 98,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 97,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 106,\n                  \"src\": \"1273:7:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 96,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1273:7:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1272:9:0\"\n            },\n            \"scope\": 254,\n            \"src\": \"1225:110:0\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 144,\n              \"nodeType\": \"Block\",\n              \"src\": \"1374:313:0\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    110\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 110,\n                      \"name\": \"donation\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 144,\n                      \"src\": \"1384:24:0\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"memory\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_struct$_Donation_$13_memory_ptr\",\n                        \"typeString\": \"struct Fundraiser.Donation\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 109,\n                        \"name\": \"Donation\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 13,\n                        \"src\": \"1384:8:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_struct$_Donation_$13_storage_ptr\",\n                          \"typeString\": \"struct Fundraiser.Donation\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 117,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 112,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 710,\n                          \"src\": \"1441:3:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 113,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"value\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1441:9:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 114,\n                          \"name\": \"block\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 700,\n                          \"src\": \"1470:5:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_block\",\n                            \"typeString\": \"block\"\n                          }\n                        },\n                        \"id\": 115,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"timestamp\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1470:15:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 111,\n                      \"name\": \"Donation\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 13,\n                      \"src\": \"1411:8:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_struct$_Donation_$13_storage_ptr_$\",\n                        \"typeString\": \"type(struct Fundraiser.Donation storage pointer)\"\n                      }\n                    },\n                    \"id\": 116,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"structConstructorCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [\n                      \"value\",\n                      \"date\"\n                    ],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1411:85:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_struct$_Donation_$13_memory\",\n                      \"typeString\": \"struct Fundraiser.Donation memory\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1384:112:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 123,\n                        \"name\": \"donation\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 110,\n                        \"src\": \"1534:8:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_struct$_Donation_$13_memory_ptr\",\n                          \"typeString\": \"struct Fundraiser.Donation memory\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_struct$_Donation_$13_memory_ptr\",\n                          \"typeString\": \"struct Fundraiser.Donation memory\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"baseExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 118,\n                          \"name\": \"_donations\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 18,\n                          \"src\": \"1506:10:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$13_storage_$dyn_storage_$\",\n                            \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                          }\n                        },\n                        \"id\": 121,\n                        \"indexExpression\": {\n                          \"argumentTypes\": null,\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 119,\n                            \"name\": \"msg\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 710,\n                            \"src\": \"1517:3:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_message\",\n                              \"typeString\": \"msg\"\n                            }\n                          },\n                          \"id\": 120,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"sender\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"1517:10:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"isConstant\": false,\n                        \"isLValue\": true,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"IndexAccess\",\n                        \"src\": \"1506:22:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_struct$_Donation_$13_storage_$dyn_storage\",\n                          \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                        }\n                      },\n                      \"id\": 122,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"push\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"1506:27:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_struct$_Donation_$13_storage_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (struct Fundraiser.Donation storage ref) returns (uint256)\"\n                      }\n                    },\n                    \"id\": 124,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1506:37:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 125,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1506:37:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 132,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 126,\n                      \"name\": \"totalDonations\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 40,\n                      \"src\": \"1553:14:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 129,\n                            \"name\": \"msg\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 710,\n                            \"src\": \"1589:3:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_message\",\n                              \"typeString\": \"msg\"\n                            }\n                          },\n                          \"id\": 130,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"value\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"1589:9:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 127,\n                          \"name\": \"totalDonations\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 40,\n                          \"src\": \"1570:14:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 128,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"add\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 478,\n                        \"src\": \"1570:18:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                          \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                        }\n                      },\n                      \"id\": 131,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1570:29:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1553:46:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 133,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1553:46:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 135,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"UnaryOperation\",\n                    \"operator\": \"++\",\n                    \"prefix\": false,\n                    \"src\": \"1609:16:0\",\n                    \"subExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 134,\n                      \"name\": \"donationsCount\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 42,\n                      \"src\": \"1609:14:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 136,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1609:16:0\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 138,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 710,\n                          \"src\": \"1658:3:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 139,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"sender\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1658:10:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 140,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 710,\n                          \"src\": \"1670:3:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 141,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"value\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1670:9:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 137,\n                      \"name\": \"DonationReceived\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 24,\n                      \"src\": \"1641:16:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (address,uint256)\"\n                      }\n                    },\n                    \"id\": 142,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1641:39:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 143,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"1636:44:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 145,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"donate\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 107,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1356:2:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 108,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1374:0:0\"\n            },\n            \"scope\": 254,\n            \"src\": \"1341:346:0\",\n            \"stateMutability\": \"payable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 214,\n              \"nodeType\": \"Block\",\n              \"src\": \"1811:363:0\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    155\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 155,\n                      \"name\": \"count\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 214,\n                      \"src\": \"1821:13:0\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 154,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1821:7:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 158,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"id\": 156,\n                      \"name\": \"myDonationsCount\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 106,\n                      \"src\": \"1837:16:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_view$__$returns$_t_uint256_$\",\n                        \"typeString\": \"function () view returns (uint256)\"\n                      }\n                    },\n                    \"id\": 157,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1837:18:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1821:34:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 165,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 159,\n                      \"name\": \"values\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 149,\n                      \"src\": \"1865:6:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 163,\n                          \"name\": \"count\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 155,\n                          \"src\": \"1888:5:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"id\": 162,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"NewExpression\",\n                        \"src\": \"1874:13:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                          \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                        },\n                        \"typeName\": {\n                          \"baseType\": {\n                            \"id\": 160,\n                            \"name\": \"uint256\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"1878:7:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 161,\n                          \"length\": null,\n                          \"nodeType\": \"ArrayTypeName\",\n                          \"src\": \"1878:9:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                            \"typeString\": \"uint256[]\"\n                          }\n                        }\n                      },\n                      \"id\": 164,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1874:20:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"src\": \"1865:29:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                      \"typeString\": \"uint256[] memory\"\n                    }\n                  },\n                  \"id\": 166,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1865:29:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 173,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 167,\n                      \"name\": \"dates\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 152,\n                      \"src\": \"1904:5:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 171,\n                          \"name\": \"count\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 155,\n                          \"src\": \"1926:5:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"id\": 170,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"NewExpression\",\n                        \"src\": \"1912:13:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                          \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                        },\n                        \"typeName\": {\n                          \"baseType\": {\n                            \"id\": 168,\n                            \"name\": \"uint256\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"1916:7:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 169,\n                          \"length\": null,\n                          \"nodeType\": \"ArrayTypeName\",\n                          \"src\": \"1916:9:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                            \"typeString\": \"uint256[]\"\n                          }\n                        }\n                      },\n                      \"id\": 172,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1912:20:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"src\": \"1904:28:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                      \"typeString\": \"uint256[] memory\"\n                    }\n                  },\n                  \"id\": 174,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1904:28:0\"\n                },\n                {\n                  \"body\": {\n                    \"id\": 208,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"1979:156:0\",\n                    \"statements\": [\n                      {\n                        \"assignments\": [\n                          186\n                        ],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 186,\n                            \"name\": \"donation\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"scope\": 208,\n                            \"src\": \"1993:25:0\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"storage\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_struct$_Donation_$13_storage_ptr\",\n                              \"typeString\": \"struct Fundraiser.Donation\"\n                            },\n                            \"typeName\": {\n                              \"contractScope\": null,\n                              \"id\": 185,\n                              \"name\": \"Donation\",\n                              \"nodeType\": \"UserDefinedTypeName\",\n                              \"referencedDeclaration\": 13,\n                              \"src\": \"1993:8:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_struct$_Donation_$13_storage_ptr\",\n                                \"typeString\": \"struct Fundraiser.Donation\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 193,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 187,\n                              \"name\": \"_donations\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 18,\n                              \"src\": \"2021:10:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$13_storage_$dyn_storage_$\",\n                                \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                              }\n                            },\n                            \"id\": 190,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 188,\n                                \"name\": \"msg\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 710,\n                                \"src\": \"2032:3:0\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_magic_message\",\n                                  \"typeString\": \"msg\"\n                                }\n                              },\n                              \"id\": 189,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"sender\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": null,\n                              \"src\": \"2032:10:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address_payable\",\n                                \"typeString\": \"address payable\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2021:22:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_struct$_Donation_$13_storage_$dyn_storage\",\n                              \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                            }\n                          },\n                          \"id\": 192,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 191,\n                            \"name\": \"i\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 176,\n                            \"src\": \"2044:1:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"2021:25:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_struct$_Donation_$13_storage\",\n                            \"typeString\": \"struct Fundraiser.Donation storage ref\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"1993:53:0\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 199,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 194,\n                              \"name\": \"values\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 149,\n                              \"src\": \"2060:6:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                \"typeString\": \"uint256[] memory\"\n                              }\n                            },\n                            \"id\": 196,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 195,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 176,\n                              \"src\": \"2067:1:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2060:9:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 197,\n                              \"name\": \"donation\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 186,\n                              \"src\": \"2072:8:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_struct$_Donation_$13_storage_ptr\",\n                                \"typeString\": \"struct Fundraiser.Donation storage pointer\"\n                              }\n                            },\n                            \"id\": 198,\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"value\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 10,\n                            \"src\": \"2072:14:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"2060:26:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 200,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"2060:26:0\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 206,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 201,\n                              \"name\": \"dates\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 152,\n                              \"src\": \"2100:5:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                \"typeString\": \"uint256[] memory\"\n                              }\n                            },\n                            \"id\": 203,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 202,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 176,\n                              \"src\": \"2106:1:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2100:8:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 204,\n                              \"name\": \"donation\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 186,\n                              \"src\": \"2111:8:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_struct$_Donation_$13_storage_ptr\",\n                                \"typeString\": \"struct Fundraiser.Donation storage pointer\"\n                              }\n                            },\n                            \"id\": 205,\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"date\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 12,\n                            \"src\": \"2111:13:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"2100:24:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 207,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"2100:24:0\"\n                      }\n                    ]\n                  },\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 181,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 179,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 176,\n                      \"src\": \"1963:1:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 180,\n                      \"name\": \"count\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 155,\n                      \"src\": \"1967:5:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1963:9:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 209,\n                  \"initializationExpression\": {\n                    \"assignments\": [\n                      176\n                    ],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 176,\n                        \"name\": \"i\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"scope\": 209,\n                        \"src\": \"1948:9:0\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 175,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"1948:7:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 178,\n                    \"initialValue\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 177,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1960:1:0\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"1948:13:0\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 183,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": false,\n                      \"src\": \"1974:3:0\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 182,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 176,\n                        \"src\": \"1974:1:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 184,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"1974:3:0\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"1943:192:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"components\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 210,\n                        \"name\": \"values\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 149,\n                        \"src\": \"2153:6:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                          \"typeString\": \"uint256[] memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 211,\n                        \"name\": \"dates\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 152,\n                        \"src\": \"2161:5:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                          \"typeString\": \"uint256[] memory\"\n                        }\n                      }\n                    ],\n                    \"id\": 212,\n                    \"isConstant\": false,\n                    \"isInlineArray\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"TupleExpression\",\n                    \"src\": \"2152:15:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$\",\n                      \"typeString\": \"tuple(uint256[] memory,uint256[] memory)\"\n                    }\n                  },\n                  \"functionReturnParameters\": 153,\n                  \"id\": 213,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2145:22:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 215,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"myDonations\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 146,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1713:2:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 153,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 149,\n                  \"name\": \"values\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 215,\n                  \"src\": \"1745:23:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                    \"typeString\": \"uint256[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 147,\n                      \"name\": \"uint256\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"1745:7:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 148,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"1745:9:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                      \"typeString\": \"uint256[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 152,\n                  \"name\": \"dates\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 215,\n                  \"src\": \"1778:22:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                    \"typeString\": \"uint256[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 150,\n                      \"name\": \"uint256\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"1778:7:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 151,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"1778:9:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                      \"typeString\": \"uint256[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1735:71:0\"\n            },\n            \"scope\": 254,\n            \"src\": \"1693:481:0\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 237,\n              \"nodeType\": \"Block\",\n              \"src\": \"2217:127:0\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    221\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 221,\n                      \"name\": \"balance\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 237,\n                      \"src\": \"2227:15:0\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 220,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2227:7:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 226,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 223,\n                          \"name\": \"this\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 728,\n                          \"src\": \"2253:4:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                            \"typeString\": \"contract Fundraiser\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                            \"typeString\": \"contract Fundraiser\"\n                          }\n                        ],\n                        \"id\": 222,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"2245:7:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": \"address\"\n                      },\n                      \"id\": 224,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2245:13:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"id\": 225,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"balance\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"2245:21:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2227:39:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 230,\n                        \"name\": \"balance\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 221,\n                        \"src\": \"2297:7:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 227,\n                        \"name\": \"beneficiary\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 38,\n                        \"src\": \"2276:11:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      \"id\": 229,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"transfer\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"2276:20:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_transfer_nonpayable$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (uint256)\"\n                      }\n                    },\n                    \"id\": 231,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2276:29:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 232,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2276:29:0\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 234,\n                        \"name\": \"balance\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 221,\n                        \"src\": \"2329:7:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 233,\n                      \"name\": \"Withdraw\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 28,\n                      \"src\": \"2320:8:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (uint256)\"\n                      }\n                    },\n                    \"id\": 235,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2320:17:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 236,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"2315:22:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 238,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 218,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 217,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 628,\n                  \"src\": \"2207:9:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"2207:9:0\"\n              }\n            ],\n            \"name\": \"withdraw\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 216,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2197:2:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 219,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2217:0:0\"\n            },\n            \"scope\": 254,\n            \"src\": \"2180:164:0\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 252,\n              \"nodeType\": \"Block\",\n              \"src\": \"2379:89:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 247,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 241,\n                      \"name\": \"totalDonations\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 40,\n                      \"src\": \"2389:14:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 244,\n                            \"name\": \"msg\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 710,\n                            \"src\": \"2425:3:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_message\",\n                              \"typeString\": \"msg\"\n                            }\n                          },\n                          \"id\": 245,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"value\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"2425:9:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 242,\n                          \"name\": \"totalDonations\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 40,\n                          \"src\": \"2406:14:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 243,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"add\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 478,\n                        \"src\": \"2406:18:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                          \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                        }\n                      },\n                      \"id\": 246,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2406:29:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"2389:46:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 248,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2389:46:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 250,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"UnaryOperation\",\n                    \"operator\": \"++\",\n                    \"prefix\": false,\n                    \"src\": \"2445:16:0\",\n                    \"subExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 249,\n                      \"name\": \"donationsCount\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 42,\n                      \"src\": \"2445:14:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 251,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2445:16:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 253,\n            \"implemented\": true,\n            \"kind\": \"fallback\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 239,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2359:2:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 240,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2379:0:0\"\n            },\n            \"scope\": 254,\n            \"src\": \"2350:118:0\",\n            \"stateMutability\": \"payable\",\n            \"superFunction\": null,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 255,\n        \"src\": \"158:2312:0\"\n      }\n    ],\n    \"src\": \"0:2471:0\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/Fundraiser.sol\",\n    \"exportedSymbols\": {\n      \"Fundraiser\": [\n        254\n      ]\n    },\n    \"id\": 255,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 1,\n        \"literals\": [\n          \"solidity\",\n          \">\",\n          \"0.4\",\n          \".23\",\n          \"<\",\n          \"0.7\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:31:0\"\n      },\n      {\n        \"absolutePath\": \"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\n        \"file\": \"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\n        \"id\": 2,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 255,\n        \"sourceUnit\": 696,\n        \"src\": \"33:63:0\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"openzeppelin-solidity/contracts/math/SafeMath.sol\",\n        \"file\": \"openzeppelin-solidity/contracts/math/SafeMath.sol\",\n        \"id\": 3,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 255,\n        \"sourceUnit\": 585,\n        \"src\": \"97:59:0\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 4,\n              \"name\": \"Ownable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 695,\n              \"src\": \"181:7:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_Ownable_$695\",\n                \"typeString\": \"contract Ownable\"\n              }\n            },\n            \"id\": 5,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"181:7:0\"\n          }\n        ],\n        \"contractDependencies\": [\n          695\n        ],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 254,\n        \"linearizedBaseContracts\": [\n          254,\n          695\n        ],\n        \"name\": \"Fundraiser\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"id\": 8,\n            \"libraryName\": {\n              \"contractScope\": null,\n              \"id\": 6,\n              \"name\": \"SafeMath\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 584,\n              \"src\": \"201:8:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_SafeMath_$584\",\n                \"typeString\": \"library SafeMath\"\n              }\n            },\n            \"nodeType\": \"UsingForDirective\",\n            \"src\": \"195:27:0\",\n            \"typeName\": {\n              \"id\": 7,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"214:7:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            }\n          },\n          {\n            \"canonicalName\": \"Fundraiser.Donation\",\n            \"id\": 13,\n            \"members\": [\n              {\n                \"constant\": false,\n                \"id\": 10,\n                \"name\": \"value\",\n                \"nodeType\": \"VariableDeclaration\",\n                \"scope\": 13,\n                \"src\": \"254:13:0\",\n                \"stateVariable\": false,\n                \"storageLocation\": \"default\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_uint256\",\n                  \"typeString\": \"uint256\"\n                },\n                \"typeName\": {\n                  \"id\": 9,\n                  \"name\": \"uint256\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"254:7:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  }\n                },\n                \"value\": null,\n                \"visibility\": \"internal\"\n              },\n              {\n                \"constant\": false,\n                \"id\": 12,\n                \"name\": \"date\",\n                \"nodeType\": \"VariableDeclaration\",\n                \"scope\": 13,\n                \"src\": \"277:12:0\",\n                \"stateVariable\": false,\n                \"storageLocation\": \"default\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_uint256\",\n                  \"typeString\": \"uint256\"\n                },\n                \"typeName\": {\n                  \"id\": 11,\n                  \"name\": \"uint256\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"277:7:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  }\n                },\n                \"value\": null,\n                \"visibility\": \"internal\"\n              }\n            ],\n            \"name\": \"Donation\",\n            \"nodeType\": \"StructDefinition\",\n            \"scope\": 254,\n            \"src\": \"228:68:0\",\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 18,\n            \"name\": \"_donations\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"301:49:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$13_storage_$dyn_storage_$\",\n              \"typeString\": \"mapping(address => struct Fundraiser.Donation[])\"\n            },\n            \"typeName\": {\n              \"id\": 17,\n              \"keyType\": {\n                \"id\": 14,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"309:7:0\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"301:30:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$13_storage_$dyn_storage_$\",\n                \"typeString\": \"mapping(address => struct Fundraiser.Donation[])\"\n              },\n              \"valueType\": {\n                \"baseType\": {\n                  \"contractScope\": null,\n                  \"id\": 15,\n                  \"name\": \"Donation\",\n                  \"nodeType\": \"UserDefinedTypeName\",\n                  \"referencedDeclaration\": 13,\n                  \"src\": \"320:8:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_struct$_Donation_$13_storage_ptr\",\n                    \"typeString\": \"struct Fundraiser.Donation\"\n                  }\n                },\n                \"id\": 16,\n                \"length\": null,\n                \"nodeType\": \"ArrayTypeName\",\n                \"src\": \"320:10:0\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_array$_t_struct$_Donation_$13_storage_$dyn_storage_ptr\",\n                  \"typeString\": \"struct Fundraiser.Donation[]\"\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 24,\n            \"name\": \"DonationReceived\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 23,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 20,\n                  \"indexed\": true,\n                  \"name\": \"donor\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 24,\n                  \"src\": \"380:21:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"380:7:0\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 22,\n                  \"indexed\": false,\n                  \"name\": \"value\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 24,\n                  \"src\": \"403:13:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 21,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"403:7:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"379:38:0\"\n            },\n            \"src\": \"357:61:0\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 28,\n            \"name\": \"Withdraw\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 27,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 26,\n                  \"indexed\": false,\n                  \"name\": \"amount\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 28,\n                  \"src\": \"438:14:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 25,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"438:7:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"437:16:0\"\n            },\n            \"src\": \"423:31:0\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 30,\n            \"name\": \"name\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"460:18:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 29,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"460:6:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 32,\n            \"name\": \"url\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"484:17:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 31,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"484:6:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 34,\n            \"name\": \"imageURL\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"507:22:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 33,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"507:6:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 36,\n            \"name\": \"description\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"535:25:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 35,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"535:6:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 38,\n            \"name\": \"beneficiary\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"567:34:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address_payable\",\n              \"typeString\": \"address payable\"\n            },\n            \"typeName\": {\n              \"id\": 37,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"567:15:0\",\n              \"stateMutability\": \"payable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address_payable\",\n                \"typeString\": \"address payable\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 40,\n            \"name\": \"totalDonations\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"608:29:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 39,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"608:7:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 42,\n            \"name\": \"donationsCount\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 254,\n            \"src\": \"643:29:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 41,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"643:7:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 81,\n              \"nodeType\": \"Block\",\n              \"src\": \"908:191:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 59,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 57,\n                      \"name\": \"name\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 30,\n                      \"src\": \"918:4:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 58,\n                      \"name\": \"_name\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 44,\n                      \"src\": \"925:5:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"918:12:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 60,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"918:12:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 63,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 61,\n                      \"name\": \"url\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 32,\n                      \"src\": \"940:3:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 62,\n                      \"name\": \"_url\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 46,\n                      \"src\": \"946:4:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"940:10:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 64,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"940:10:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 67,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 65,\n                      \"name\": \"imageURL\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 34,\n                      \"src\": \"960:8:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 66,\n                      \"name\": \"_imageURL\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 48,\n                      \"src\": \"971:9:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"960:20:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 68,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"960:20:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 71,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 69,\n                      \"name\": \"description\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 36,\n                      \"src\": \"990:11:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 70,\n                      \"name\": \"_description\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 50,\n                      \"src\": \"1004:12:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"990:26:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 72,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"990:26:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 75,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 73,\n                      \"name\": \"beneficiary\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 38,\n                      \"src\": \"1026:11:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 74,\n                      \"name\": \"_beneficiary\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 52,\n                      \"src\": \"1040:12:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"1026:26:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"id\": 76,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1026:26:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 78,\n                        \"name\": \"_custodian\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 54,\n                        \"src\": \"1081:10:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 77,\n                      \"name\": \"_transferOwnership\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 694,\n                      \"src\": \"1062:18:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address)\"\n                      }\n                    },\n                    \"id\": 79,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1062:30:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 80,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1062:30:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 82,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 55,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 44,\n                  \"name\": \"_name\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 82,\n                  \"src\": \"700:19:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 43,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"700:6:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 46,\n                  \"name\": \"_url\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 82,\n                  \"src\": \"729:18:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 45,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"729:6:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 48,\n                  \"name\": \"_imageURL\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 82,\n                  \"src\": \"757:23:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 47,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"757:6:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 50,\n                  \"name\": \"_description\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 82,\n                  \"src\": \"790:26:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 49,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"790:6:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 52,\n                  \"name\": \"_beneficiary\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 82,\n                  \"src\": \"826:28:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"typeName\": {\n                    \"id\": 51,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"826:15:0\",\n                    \"stateMutability\": \"payable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 54,\n                  \"name\": \"_custodian\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 82,\n                  \"src\": \"864:18:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"864:7:0\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"690:198:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 56,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"908:0:0\"\n            },\n            \"scope\": 254,\n            \"src\": \"679:420:0\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 93,\n              \"nodeType\": \"Block\",\n              \"src\": \"1176:43:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 91,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 89,\n                      \"name\": \"beneficiary\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 38,\n                      \"src\": \"1186:11:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 90,\n                      \"name\": \"_beneficiary\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 84,\n                      \"src\": \"1200:12:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"1186:26:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"id\": 92,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1186:26:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 94,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 87,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 86,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 628,\n                  \"src\": \"1166:9:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"1166:9:0\"\n              }\n            ],\n            \"name\": \"setBeneficiary\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 85,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 84,\n                  \"name\": \"_beneficiary\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 94,\n                  \"src\": \"1129:28:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"typeName\": {\n                    \"id\": 83,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1129:15:0\",\n                    \"stateMutability\": \"payable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1128:30:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 88,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1176:0:0\"\n            },\n            \"scope\": 254,\n            \"src\": \"1105:114:0\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 105,\n              \"nodeType\": \"Block\",\n              \"src\": \"1282:53:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 99,\n                        \"name\": \"_donations\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 18,\n                        \"src\": \"1299:10:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$13_storage_$dyn_storage_$\",\n                          \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                        }\n                      },\n                      \"id\": 102,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 100,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 710,\n                          \"src\": \"1310:3:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 101,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"sender\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1310:10:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"1299:22:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_struct$_Donation_$13_storage_$dyn_storage\",\n                        \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                      }\n                    },\n                    \"id\": 103,\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"length\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"1299:29:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 98,\n                  \"id\": 104,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1292:36:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 106,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"myDonationsCount\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 95,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1250:2:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 98,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 97,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 106,\n                  \"src\": \"1273:7:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 96,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1273:7:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1272:9:0\"\n            },\n            \"scope\": 254,\n            \"src\": \"1225:110:0\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 144,\n              \"nodeType\": \"Block\",\n              \"src\": \"1374:313:0\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    110\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 110,\n                      \"name\": \"donation\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 144,\n                      \"src\": \"1384:24:0\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"memory\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_struct$_Donation_$13_memory_ptr\",\n                        \"typeString\": \"struct Fundraiser.Donation\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 109,\n                        \"name\": \"Donation\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 13,\n                        \"src\": \"1384:8:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_struct$_Donation_$13_storage_ptr\",\n                          \"typeString\": \"struct Fundraiser.Donation\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 117,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 112,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 710,\n                          \"src\": \"1441:3:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 113,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"value\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1441:9:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 114,\n                          \"name\": \"block\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 700,\n                          \"src\": \"1470:5:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_block\",\n                            \"typeString\": \"block\"\n                          }\n                        },\n                        \"id\": 115,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"timestamp\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1470:15:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 111,\n                      \"name\": \"Donation\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 13,\n                      \"src\": \"1411:8:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_struct$_Donation_$13_storage_ptr_$\",\n                        \"typeString\": \"type(struct Fundraiser.Donation storage pointer)\"\n                      }\n                    },\n                    \"id\": 116,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"structConstructorCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [\n                      \"value\",\n                      \"date\"\n                    ],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1411:85:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_struct$_Donation_$13_memory\",\n                      \"typeString\": \"struct Fundraiser.Donation memory\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1384:112:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 123,\n                        \"name\": \"donation\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 110,\n                        \"src\": \"1534:8:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_struct$_Donation_$13_memory_ptr\",\n                          \"typeString\": \"struct Fundraiser.Donation memory\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_struct$_Donation_$13_memory_ptr\",\n                          \"typeString\": \"struct Fundraiser.Donation memory\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"baseExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 118,\n                          \"name\": \"_donations\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 18,\n                          \"src\": \"1506:10:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$13_storage_$dyn_storage_$\",\n                            \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                          }\n                        },\n                        \"id\": 121,\n                        \"indexExpression\": {\n                          \"argumentTypes\": null,\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 119,\n                            \"name\": \"msg\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 710,\n                            \"src\": \"1517:3:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_message\",\n                              \"typeString\": \"msg\"\n                            }\n                          },\n                          \"id\": 120,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"sender\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"1517:10:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"isConstant\": false,\n                        \"isLValue\": true,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"IndexAccess\",\n                        \"src\": \"1506:22:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_struct$_Donation_$13_storage_$dyn_storage\",\n                          \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                        }\n                      },\n                      \"id\": 122,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"push\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"1506:27:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_struct$_Donation_$13_storage_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (struct Fundraiser.Donation storage ref) returns (uint256)\"\n                      }\n                    },\n                    \"id\": 124,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1506:37:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 125,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1506:37:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 132,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 126,\n                      \"name\": \"totalDonations\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 40,\n                      \"src\": \"1553:14:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 129,\n                            \"name\": \"msg\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 710,\n                            \"src\": \"1589:3:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_message\",\n                              \"typeString\": \"msg\"\n                            }\n                          },\n                          \"id\": 130,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"value\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"1589:9:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 127,\n                          \"name\": \"totalDonations\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 40,\n                          \"src\": \"1570:14:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 128,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"add\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 478,\n                        \"src\": \"1570:18:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                          \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                        }\n                      },\n                      \"id\": 131,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1570:29:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1553:46:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 133,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1553:46:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 135,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"UnaryOperation\",\n                    \"operator\": \"++\",\n                    \"prefix\": false,\n                    \"src\": \"1609:16:0\",\n                    \"subExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 134,\n                      \"name\": \"donationsCount\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 42,\n                      \"src\": \"1609:14:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 136,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1609:16:0\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 138,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 710,\n                          \"src\": \"1658:3:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 139,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"sender\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1658:10:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 140,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 710,\n                          \"src\": \"1670:3:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 141,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"value\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1670:9:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 137,\n                      \"name\": \"DonationReceived\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 24,\n                      \"src\": \"1641:16:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (address,uint256)\"\n                      }\n                    },\n                    \"id\": 142,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1641:39:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 143,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"1636:44:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 145,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"donate\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 107,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1356:2:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 108,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1374:0:0\"\n            },\n            \"scope\": 254,\n            \"src\": \"1341:346:0\",\n            \"stateMutability\": \"payable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 214,\n              \"nodeType\": \"Block\",\n              \"src\": \"1811:363:0\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    155\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 155,\n                      \"name\": \"count\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 214,\n                      \"src\": \"1821:13:0\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 154,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1821:7:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 158,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"id\": 156,\n                      \"name\": \"myDonationsCount\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 106,\n                      \"src\": \"1837:16:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_view$__$returns$_t_uint256_$\",\n                        \"typeString\": \"function () view returns (uint256)\"\n                      }\n                    },\n                    \"id\": 157,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1837:18:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1821:34:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 165,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 159,\n                      \"name\": \"values\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 149,\n                      \"src\": \"1865:6:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 163,\n                          \"name\": \"count\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 155,\n                          \"src\": \"1888:5:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"id\": 162,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"NewExpression\",\n                        \"src\": \"1874:13:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                          \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                        },\n                        \"typeName\": {\n                          \"baseType\": {\n                            \"id\": 160,\n                            \"name\": \"uint256\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"1878:7:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 161,\n                          \"length\": null,\n                          \"nodeType\": \"ArrayTypeName\",\n                          \"src\": \"1878:9:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                            \"typeString\": \"uint256[]\"\n                          }\n                        }\n                      },\n                      \"id\": 164,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1874:20:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"src\": \"1865:29:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                      \"typeString\": \"uint256[] memory\"\n                    }\n                  },\n                  \"id\": 166,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1865:29:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 173,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 167,\n                      \"name\": \"dates\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 152,\n                      \"src\": \"1904:5:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 171,\n                          \"name\": \"count\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 155,\n                          \"src\": \"1926:5:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"id\": 170,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"NewExpression\",\n                        \"src\": \"1912:13:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                          \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                        },\n                        \"typeName\": {\n                          \"baseType\": {\n                            \"id\": 168,\n                            \"name\": \"uint256\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"1916:7:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 169,\n                          \"length\": null,\n                          \"nodeType\": \"ArrayTypeName\",\n                          \"src\": \"1916:9:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                            \"typeString\": \"uint256[]\"\n                          }\n                        }\n                      },\n                      \"id\": 172,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1912:20:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"src\": \"1904:28:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                      \"typeString\": \"uint256[] memory\"\n                    }\n                  },\n                  \"id\": 174,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1904:28:0\"\n                },\n                {\n                  \"body\": {\n                    \"id\": 208,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"1979:156:0\",\n                    \"statements\": [\n                      {\n                        \"assignments\": [\n                          186\n                        ],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 186,\n                            \"name\": \"donation\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"scope\": 208,\n                            \"src\": \"1993:25:0\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"storage\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_struct$_Donation_$13_storage_ptr\",\n                              \"typeString\": \"struct Fundraiser.Donation\"\n                            },\n                            \"typeName\": {\n                              \"contractScope\": null,\n                              \"id\": 185,\n                              \"name\": \"Donation\",\n                              \"nodeType\": \"UserDefinedTypeName\",\n                              \"referencedDeclaration\": 13,\n                              \"src\": \"1993:8:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_struct$_Donation_$13_storage_ptr\",\n                                \"typeString\": \"struct Fundraiser.Donation\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 193,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 187,\n                              \"name\": \"_donations\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 18,\n                              \"src\": \"2021:10:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$13_storage_$dyn_storage_$\",\n                                \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                              }\n                            },\n                            \"id\": 190,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 188,\n                                \"name\": \"msg\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 710,\n                                \"src\": \"2032:3:0\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_magic_message\",\n                                  \"typeString\": \"msg\"\n                                }\n                              },\n                              \"id\": 189,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"sender\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": null,\n                              \"src\": \"2032:10:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address_payable\",\n                                \"typeString\": \"address payable\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2021:22:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_struct$_Donation_$13_storage_$dyn_storage\",\n                              \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                            }\n                          },\n                          \"id\": 192,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 191,\n                            \"name\": \"i\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 176,\n                            \"src\": \"2044:1:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"2021:25:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_struct$_Donation_$13_storage\",\n                            \"typeString\": \"struct Fundraiser.Donation storage ref\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"1993:53:0\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 199,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 194,\n                              \"name\": \"values\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 149,\n                              \"src\": \"2060:6:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                \"typeString\": \"uint256[] memory\"\n                              }\n                            },\n                            \"id\": 196,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 195,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 176,\n                              \"src\": \"2067:1:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2060:9:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 197,\n                              \"name\": \"donation\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 186,\n                              \"src\": \"2072:8:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_struct$_Donation_$13_storage_ptr\",\n                                \"typeString\": \"struct Fundraiser.Donation storage pointer\"\n                              }\n                            },\n                            \"id\": 198,\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"value\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 10,\n                            \"src\": \"2072:14:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"2060:26:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 200,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"2060:26:0\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 206,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 201,\n                              \"name\": \"dates\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 152,\n                              \"src\": \"2100:5:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                \"typeString\": \"uint256[] memory\"\n                              }\n                            },\n                            \"id\": 203,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 202,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 176,\n                              \"src\": \"2106:1:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2100:8:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 204,\n                              \"name\": \"donation\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 186,\n                              \"src\": \"2111:8:0\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_struct$_Donation_$13_storage_ptr\",\n                                \"typeString\": \"struct Fundraiser.Donation storage pointer\"\n                              }\n                            },\n                            \"id\": 205,\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"date\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 12,\n                            \"src\": \"2111:13:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"2100:24:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 207,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"2100:24:0\"\n                      }\n                    ]\n                  },\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 181,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 179,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 176,\n                      \"src\": \"1963:1:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 180,\n                      \"name\": \"count\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 155,\n                      \"src\": \"1967:5:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1963:9:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 209,\n                  \"initializationExpression\": {\n                    \"assignments\": [\n                      176\n                    ],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 176,\n                        \"name\": \"i\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"scope\": 209,\n                        \"src\": \"1948:9:0\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 175,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"1948:7:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 178,\n                    \"initialValue\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 177,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1960:1:0\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"1948:13:0\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 183,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": false,\n                      \"src\": \"1974:3:0\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 182,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 176,\n                        \"src\": \"1974:1:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 184,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"1974:3:0\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"1943:192:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"components\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 210,\n                        \"name\": \"values\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 149,\n                        \"src\": \"2153:6:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                          \"typeString\": \"uint256[] memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 211,\n                        \"name\": \"dates\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 152,\n                        \"src\": \"2161:5:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                          \"typeString\": \"uint256[] memory\"\n                        }\n                      }\n                    ],\n                    \"id\": 212,\n                    \"isConstant\": false,\n                    \"isInlineArray\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"TupleExpression\",\n                    \"src\": \"2152:15:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$\",\n                      \"typeString\": \"tuple(uint256[] memory,uint256[] memory)\"\n                    }\n                  },\n                  \"functionReturnParameters\": 153,\n                  \"id\": 213,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2145:22:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 215,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"myDonations\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 146,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1713:2:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 153,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 149,\n                  \"name\": \"values\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 215,\n                  \"src\": \"1745:23:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                    \"typeString\": \"uint256[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 147,\n                      \"name\": \"uint256\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"1745:7:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 148,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"1745:9:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                      \"typeString\": \"uint256[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 152,\n                  \"name\": \"dates\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 215,\n                  \"src\": \"1778:22:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                    \"typeString\": \"uint256[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 150,\n                      \"name\": \"uint256\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"1778:7:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 151,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"1778:9:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                      \"typeString\": \"uint256[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1735:71:0\"\n            },\n            \"scope\": 254,\n            \"src\": \"1693:481:0\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 237,\n              \"nodeType\": \"Block\",\n              \"src\": \"2217:127:0\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    221\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 221,\n                      \"name\": \"balance\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 237,\n                      \"src\": \"2227:15:0\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 220,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2227:7:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 226,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 223,\n                          \"name\": \"this\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 728,\n                          \"src\": \"2253:4:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                            \"typeString\": \"contract Fundraiser\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                            \"typeString\": \"contract Fundraiser\"\n                          }\n                        ],\n                        \"id\": 222,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"2245:7:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": \"address\"\n                      },\n                      \"id\": 224,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2245:13:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"id\": 225,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"balance\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"2245:21:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2227:39:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 230,\n                        \"name\": \"balance\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 221,\n                        \"src\": \"2297:7:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 227,\n                        \"name\": \"beneficiary\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 38,\n                        \"src\": \"2276:11:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      \"id\": 229,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"transfer\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"2276:20:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_transfer_nonpayable$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (uint256)\"\n                      }\n                    },\n                    \"id\": 231,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2276:29:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 232,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2276:29:0\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 234,\n                        \"name\": \"balance\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 221,\n                        \"src\": \"2329:7:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 233,\n                      \"name\": \"Withdraw\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 28,\n                      \"src\": \"2320:8:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (uint256)\"\n                      }\n                    },\n                    \"id\": 235,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2320:17:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 236,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"2315:22:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 238,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 218,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 217,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 628,\n                  \"src\": \"2207:9:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"2207:9:0\"\n              }\n            ],\n            \"name\": \"withdraw\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 216,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2197:2:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 219,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2217:0:0\"\n            },\n            \"scope\": 254,\n            \"src\": \"2180:164:0\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 252,\n              \"nodeType\": \"Block\",\n              \"src\": \"2379:89:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 247,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 241,\n                      \"name\": \"totalDonations\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 40,\n                      \"src\": \"2389:14:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 244,\n                            \"name\": \"msg\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 710,\n                            \"src\": \"2425:3:0\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_message\",\n                              \"typeString\": \"msg\"\n                            }\n                          },\n                          \"id\": 245,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"value\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"2425:9:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 242,\n                          \"name\": \"totalDonations\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 40,\n                          \"src\": \"2406:14:0\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 243,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"add\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 478,\n                        \"src\": \"2406:18:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                          \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                        }\n                      },\n                      \"id\": 246,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2406:29:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"2389:46:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 248,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2389:46:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 250,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"UnaryOperation\",\n                    \"operator\": \"++\",\n                    \"prefix\": false,\n                    \"src\": \"2445:16:0\",\n                    \"subExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 249,\n                      \"name\": \"donationsCount\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 42,\n                      \"src\": \"2445:14:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 251,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2445:16:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 253,\n            \"implemented\": true,\n            \"kind\": \"fallback\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 239,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2359:2:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 240,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2379:0:0\"\n            },\n            \"scope\": 254,\n            \"src\": \"2350:118:0\",\n            \"stateMutability\": \"payable\",\n            \"superFunction\": null,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 255,\n        \"src\": \"158:2312:0\"\n      }\n    ],\n    \"src\": \"0:2471:0\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.5.8+commit.23d335f2.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.0.16\",\n  \"updatedAt\": \"2019-10-10T05:34:34.817Z\",\n  \"devdoc\": {\n    \"methods\": {\n      \"isOwner()\": {\n        \"details\": \"Returns true if the caller is the current owner.\"\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    }\n  },\n  \"userdoc\": {\n    \"methods\": {}\n  }\n}"
  },
  {
    "path": "chapter-10+11/client/src/contracts/FundraiserFactory.json",
    "content": "{\n  \"contractName\": \"FundraiserFactory\",\n  \"abi\": [\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"name\": \"fundraiser\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"FundraiserCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"url\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"imageURL\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"description\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"beneficiary\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"createFundraiser\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"fundraisersCount\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"name\": \"limit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"fundraisers\",\n      \"outputs\": [\n        {\n          \"name\": \"coll\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"url\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"imageURL\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"description\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"beneficiary\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"createFundraiser\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"limit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"offset\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"fundraisers\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"coll\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"fundraisersCount\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"fundraiser\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"FundraiserCreated\\\",\\\"type\\\":\\\"event\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{}},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/FundraiserFactory.sol\\\":\\\"FundraiserFactory\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/Fundraiser.sol\\\":{\\\"keccak256\\\":\\\"0x4c71de6bd99f371b0ccbf390caa727bfe9429f7227ea476bef46921e7394235a\\\",\\\"urls\\\":[\\\"bzzr://e74b39014904a052c9d666edb293af447a25a9efe53b46489cbf6fa9f7c0e90e\\\"]},\\\"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/FundraiserFactory.sol\\\":{\\\"keccak256\\\":\\\"0xc0bbdd93a55e2ce339a67bf2bd0b419ec723d730d05eea7d10d6573961c57c82\\\",\\\"urls\\\":[\\\"bzzr://e9bc315adceb848fbe94b86633f5052e7b76b5474c92570fdbb2707398d18573\\\"]},\\\"openzeppelin-solidity/contracts/math/SafeMath.sol\\\":{\\\"keccak256\\\":\\\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\\\",\\\"urls\\\":[\\\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\\\"]},\\\"openzeppelin-solidity/contracts/ownership/Ownable.sol\\\":{\\\"keccak256\\\":\\\"0xf79fb10e8235770eb4aea7249034076a3cc9f9119ad944fc48705bae9c9d20dc\\\",\\\"urls\\\":[\\\"bzzr://d12a11272051eb6586de8f7e0a82c04a98c9984ce8b2a6cf1ee439f65aba29a9\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b50611fef806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311d752ad146200004b578063704914f814620002fa5780639d3b4355146200038c575b600080fd5b620002f8600480360360a08110156200006357600080fd5b81019080803590602001906401000000008111156200008157600080fd5b8201836020820111156200009457600080fd5b80359060200191846001830284011164010000000083111715620000b757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156200011b57600080fd5b8201836020820111156200012e57600080fd5b803590602001918460018302840111640100000000831117156200015157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115620001b557600080fd5b820183602082011115620001c857600080fd5b80359060200191846001830284011164010000000083111715620001eb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156200024f57600080fd5b8201836020820111156200026257600080fd5b803590602001918460018302840111640100000000831117156200028557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050620003ac565b005b62000333600480360360408110156200031257600080fd5b810190808035906020019092919080359060200190929190505050620006cf565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015620003785780820151818401526020810190506200035b565b505050509050019250505060405180910390f35b6200039662000866565b6040518082815260200191505060405180910390f35b6000858585858533604051620003c29062000872565b80806020018060200180602001806020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185810385528b818151815260200191508051906020019080838360005b838110156200047157808201518184015260208101905062000454565b50505050905090810190601f1680156200049f5780820380516001836020036101000a031916815260200191505b5085810384528a818151815260200191508051906020019080838360005b83811015620004da578082015181840152602081019050620004bd565b50505050905090810190601f168015620005085780820380516001836020036101000a031916815260200191505b50858103835289818151815260200191508051906020019080838360005b838110156200054357808201518184015260208101905062000526565b50505050905090810190601f168015620005715780820380516001836020036101000a031916815260200191505b50858103825288818151815260200191508051906020019080838360005b83811015620005ac5780820151818401526020810190506200058f565b50505050905090810190601f168015620005da5780820380516001836020036101000a031916815260200191505b509a5050505050505050505050604051809103906000f08015801562000604573d6000803e3d6000fd5b50905060008190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa2398daac0c8053a1e3c0280916c2ec6bc884f0959c27e639a4db829b7eabfb160405160405180910390a3505050505050565b6060620006db62000866565b82111562000751576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6666736574206f7574206f6620626f756e647300000000000000000000000081525060200191505060405180910390fd5b6000826200075e62000866565b03905083811062000770578362000772565b805b9050601481106200078557601462000787565b805b905080604051908082528060200260200182016040528015620007b95781602001602082028038833980820191505090505b50915060008090505b818110156200085b57600081850181548110620007db57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168382815181106200081357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050620007c2565b508191505092915050565b60008080549050905090565b61174380620008818339019056fe60806040523480156200001157600080fd5b506040516200174338038062001743833981018060405260c08110156200003757600080fd5b8101908080516401000000008111156200005057600080fd5b828101905060208101848111156200006757600080fd5b81518560018202830111640100000000821117156200008557600080fd5b50509291906020018051640100000000811115620000a257600080fd5b82810190506020810184811115620000b957600080fd5b8151856001820283011164010000000082111715620000d757600080fd5b50509291906020018051640100000000811115620000f457600080fd5b828101905060208101848111156200010b57600080fd5b81518560018202830111640100000000821117156200012957600080fd5b505092919060200180516401000000008111156200014657600080fd5b828101905060208101848111156200015d57600080fd5b81518560018202830111640100000000821117156200017b57600080fd5b50509291906020018051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a385600290805190602001906200026e9291906200045e565b508460039080519060200190620002879291906200045e565b508360049080519060200190620002a09291906200045e565b508260059080519060200190620002b99291906200045e565b5081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200030c816200031860201b60201c565b5050505050506200050d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620003a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806200171d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004a157805160ff1916838001178555620004d2565b82800160010185558215620004d2579182015b82811115620004d1578251825591602001919060010190620004b4565b5b509050620004e19190620004e5565b5090565b6200050a91905b8082111562000506576000816000905550600101620004ec565b5090565b90565b611200806200051d6000396000f3fe6080604052600436106100f35760003560e01c8063715018a61161008a578063b90497e011610059578063b90497e014610538578063de2ed893146105c8578063ed88c68e146105f3578063f2fde38b146105fd576100f3565b8063715018a61461040b5780637284e416146104225780638da5cb5b146104b25780638f32d59b14610509576100f3565b80631f522595116100c65780631f522595146102e257806338af3eed1461030d5780633ccfd60b146103645780635600f04f1461037b576100f3565b80630180b97c1461012257806306fdde031461014d5780631a57f7b4146101dd5780631c31f71014610291575b6101083460075461064e90919063ffffffff16565b600781905550600860008154809291906001019190505550005b34801561012e57600080fd5b506101376106d6565b6040518082815260200191505060405180910390f35b34801561015957600080fd5b50610162610720565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a2578082015181840152602081019050610187565b50505050905090810190601f1680156101cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101e957600080fd5b506101f26107be565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561023957808201518184015260208101905061021e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561027b578082015181840152602081019050610260565b5050505090500194505050505060405180910390f35b34801561029d57600080fd5b506102e0600480360360208110156102b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108ef565b005b3480156102ee57600080fd5b506102f76109ad565b6040518082815260200191505060405180910390f35b34801561031957600080fd5b506103226109b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561037057600080fd5b506103796109d9565b005b34801561038757600080fd5b50610390610b12565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103d05780820151818401526020810190506103b5565b50505050905090810190601f1680156103fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041757600080fd5b50610420610bb0565b005b34801561042e57600080fd5b50610437610ce9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047757808201518184015260208101905061045c565b50505050905090810190601f1680156104a45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104be57600080fd5b506104c7610d87565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561051557600080fd5b5061051e610db0565b604051808215151515815260200191505060405180910390f35b34801561054457600080fd5b5061054d610e07565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561058d578082015181840152602081019050610572565b50505050905090810190601f1680156105ba5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105d457600080fd5b506105dd610ea5565b6040518082815260200191505060405180910390f35b6105fb610eab565b005b34801561060957600080fd5b5061064c6004803603602081101561062057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fca565b005b6000808284019050838110156106cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905090565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107b65780601f1061078b576101008083540402835291602001916107b6565b820191906000526020600020905b81548152906001019060200180831161079957829003601f168201915b505050505081565b60608060006107cb6106d6565b9050806040519080825280602002602001820160405280156107fc5781602001602082028038833980820191505090505b5092508060405190808252806020026020018201604052801561082e5781602001602082028038833980820191505090505b50915060008090505b818110156108e3576000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061088b57fe5b9060005260206000209060020201905080600001548583815181106108ac57fe5b60200260200101818152505080600101548483815181106108c957fe5b602002602001018181525050508080600101915050610837565b50828292509250509091565b6108f7610db0565b610969576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109e1610db0565b610a53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff16319050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ad7573d6000803e3d6000fd5b507f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d816040518082815260200191505060405180910390a150565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ba85780601f10610b7d57610100808354040283529160200191610ba8565b820191906000526020600020905b815481529060010190602001808311610b8b57829003601f168201915b505050505081565b610bb8610db0565b610c2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d7f5780601f10610d5457610100808354040283529160200191610d7f565b820191906000526020600020905b815481529060010190602001808311610d6257829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e9d5780601f10610e7257610100808354040283529160200191610e9d565b820191906000526020600020905b815481529060010190602001808311610e8057829003601f168201915b505050505081565b60075481565b610eb3611194565b6040518060400160405280348152602001428152509050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505090600182039060005260206000209060020201600090919290919091506000820151816000015560208201518160010155505050610f613460075461064e90919063ffffffff16565b6007819055506008600081548092919060010191905055503373ffffffffffffffffffffffffffffffffffffffff167f264f630d9efa0d07053a31163641d9fcc0adafc9d9e76f1c37c2ce3a558d2c52346040518082815260200191505060405180910390a250565b610fd2610db0565b611044576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61104d81611050565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806111af6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60405180604001604052806000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a165627a7a723058209fbfa484628b02babb980313ae79b77e708df8b0c46024caff44504889d7641100294f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a165627a7a7230582074970f9039947bd68280c4890eda25eea22b3196e45bb676de7fe01d9e4f4feb0029\",\n  \"deployedBytecode\": \"0x60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311d752ad146200004b578063704914f814620002fa5780639d3b4355146200038c575b600080fd5b620002f8600480360360a08110156200006357600080fd5b81019080803590602001906401000000008111156200008157600080fd5b8201836020820111156200009457600080fd5b80359060200191846001830284011164010000000083111715620000b757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156200011b57600080fd5b8201836020820111156200012e57600080fd5b803590602001918460018302840111640100000000831117156200015157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115620001b557600080fd5b820183602082011115620001c857600080fd5b80359060200191846001830284011164010000000083111715620001eb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156200024f57600080fd5b8201836020820111156200026257600080fd5b803590602001918460018302840111640100000000831117156200028557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050620003ac565b005b62000333600480360360408110156200031257600080fd5b810190808035906020019092919080359060200190929190505050620006cf565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015620003785780820151818401526020810190506200035b565b505050509050019250505060405180910390f35b6200039662000866565b6040518082815260200191505060405180910390f35b6000858585858533604051620003c29062000872565b80806020018060200180602001806020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185810385528b818151815260200191508051906020019080838360005b838110156200047157808201518184015260208101905062000454565b50505050905090810190601f1680156200049f5780820380516001836020036101000a031916815260200191505b5085810384528a818151815260200191508051906020019080838360005b83811015620004da578082015181840152602081019050620004bd565b50505050905090810190601f168015620005085780820380516001836020036101000a031916815260200191505b50858103835289818151815260200191508051906020019080838360005b838110156200054357808201518184015260208101905062000526565b50505050905090810190601f168015620005715780820380516001836020036101000a031916815260200191505b50858103825288818151815260200191508051906020019080838360005b83811015620005ac5780820151818401526020810190506200058f565b50505050905090810190601f168015620005da5780820380516001836020036101000a031916815260200191505b509a5050505050505050505050604051809103906000f08015801562000604573d6000803e3d6000fd5b50905060008190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa2398daac0c8053a1e3c0280916c2ec6bc884f0959c27e639a4db829b7eabfb160405160405180910390a3505050505050565b6060620006db62000866565b82111562000751576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6666736574206f7574206f6620626f756e647300000000000000000000000081525060200191505060405180910390fd5b6000826200075e62000866565b03905083811062000770578362000772565b805b9050601481106200078557601462000787565b805b905080604051908082528060200260200182016040528015620007b95781602001602082028038833980820191505090505b50915060008090505b818110156200085b57600081850181548110620007db57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168382815181106200081357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050620007c2565b508191505092915050565b60008080549050905090565b61174380620008818339019056fe60806040523480156200001157600080fd5b506040516200174338038062001743833981018060405260c08110156200003757600080fd5b8101908080516401000000008111156200005057600080fd5b828101905060208101848111156200006757600080fd5b81518560018202830111640100000000821117156200008557600080fd5b50509291906020018051640100000000811115620000a257600080fd5b82810190506020810184811115620000b957600080fd5b8151856001820283011164010000000082111715620000d757600080fd5b50509291906020018051640100000000811115620000f457600080fd5b828101905060208101848111156200010b57600080fd5b81518560018202830111640100000000821117156200012957600080fd5b505092919060200180516401000000008111156200014657600080fd5b828101905060208101848111156200015d57600080fd5b81518560018202830111640100000000821117156200017b57600080fd5b50509291906020018051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a385600290805190602001906200026e9291906200045e565b508460039080519060200190620002879291906200045e565b508360049080519060200190620002a09291906200045e565b508260059080519060200190620002b99291906200045e565b5081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200030c816200031860201b60201c565b5050505050506200050d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620003a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806200171d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004a157805160ff1916838001178555620004d2565b82800160010185558215620004d2579182015b82811115620004d1578251825591602001919060010190620004b4565b5b509050620004e19190620004e5565b5090565b6200050a91905b8082111562000506576000816000905550600101620004ec565b5090565b90565b611200806200051d6000396000f3fe6080604052600436106100f35760003560e01c8063715018a61161008a578063b90497e011610059578063b90497e014610538578063de2ed893146105c8578063ed88c68e146105f3578063f2fde38b146105fd576100f3565b8063715018a61461040b5780637284e416146104225780638da5cb5b146104b25780638f32d59b14610509576100f3565b80631f522595116100c65780631f522595146102e257806338af3eed1461030d5780633ccfd60b146103645780635600f04f1461037b576100f3565b80630180b97c1461012257806306fdde031461014d5780631a57f7b4146101dd5780631c31f71014610291575b6101083460075461064e90919063ffffffff16565b600781905550600860008154809291906001019190505550005b34801561012e57600080fd5b506101376106d6565b6040518082815260200191505060405180910390f35b34801561015957600080fd5b50610162610720565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a2578082015181840152602081019050610187565b50505050905090810190601f1680156101cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101e957600080fd5b506101f26107be565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561023957808201518184015260208101905061021e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561027b578082015181840152602081019050610260565b5050505090500194505050505060405180910390f35b34801561029d57600080fd5b506102e0600480360360208110156102b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108ef565b005b3480156102ee57600080fd5b506102f76109ad565b6040518082815260200191505060405180910390f35b34801561031957600080fd5b506103226109b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561037057600080fd5b506103796109d9565b005b34801561038757600080fd5b50610390610b12565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103d05780820151818401526020810190506103b5565b50505050905090810190601f1680156103fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041757600080fd5b50610420610bb0565b005b34801561042e57600080fd5b50610437610ce9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047757808201518184015260208101905061045c565b50505050905090810190601f1680156104a45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104be57600080fd5b506104c7610d87565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561051557600080fd5b5061051e610db0565b604051808215151515815260200191505060405180910390f35b34801561054457600080fd5b5061054d610e07565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561058d578082015181840152602081019050610572565b50505050905090810190601f1680156105ba5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105d457600080fd5b506105dd610ea5565b6040518082815260200191505060405180910390f35b6105fb610eab565b005b34801561060957600080fd5b5061064c6004803603602081101561062057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fca565b005b6000808284019050838110156106cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905090565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107b65780601f1061078b576101008083540402835291602001916107b6565b820191906000526020600020905b81548152906001019060200180831161079957829003601f168201915b505050505081565b60608060006107cb6106d6565b9050806040519080825280602002602001820160405280156107fc5781602001602082028038833980820191505090505b5092508060405190808252806020026020018201604052801561082e5781602001602082028038833980820191505090505b50915060008090505b818110156108e3576000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061088b57fe5b9060005260206000209060020201905080600001548583815181106108ac57fe5b60200260200101818152505080600101548483815181106108c957fe5b602002602001018181525050508080600101915050610837565b50828292509250509091565b6108f7610db0565b610969576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109e1610db0565b610a53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff16319050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ad7573d6000803e3d6000fd5b507f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d816040518082815260200191505060405180910390a150565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ba85780601f10610b7d57610100808354040283529160200191610ba8565b820191906000526020600020905b815481529060010190602001808311610b8b57829003601f168201915b505050505081565b610bb8610db0565b610c2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d7f5780601f10610d5457610100808354040283529160200191610d7f565b820191906000526020600020905b815481529060010190602001808311610d6257829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e9d5780601f10610e7257610100808354040283529160200191610e9d565b820191906000526020600020905b815481529060010190602001808311610e8057829003601f168201915b505050505081565b60075481565b610eb3611194565b6040518060400160405280348152602001428152509050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505090600182039060005260206000209060020201600090919290919091506000820151816000015560208201518160010155505050610f613460075461064e90919063ffffffff16565b6007819055506008600081548092919060010191905055503373ffffffffffffffffffffffffffffffffffffffff167f264f630d9efa0d07053a31163641d9fcc0adafc9d9e76f1c37c2ce3a558d2c52346040518082815260200191505060405180910390a250565b610fd2610db0565b611044576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61104d81611050565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806111af6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60405180604001604052806000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a165627a7a723058209fbfa484628b02babb980313ae79b77e708df8b0c46024caff44504889d7641100294f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a165627a7a7230582074970f9039947bd68280c4890eda25eea22b3196e45bb676de7fe01d9e4f4feb0029\",\n  \"sourceMap\": \"61:1320:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;61:1320:1;;;;;;;\",\n  \"deployedSourceMap\": \"61:1320:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;61:1320:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;251:501;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;251:501:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;251:501:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;251:501:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;251:501:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;251:501:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;251:501:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;251:501:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;251:501:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;251:501:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;251:501:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;251:501:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;251:501:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;251:501:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;251:501:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;251:501:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;251:501:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;251:501:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;864:515;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;864:515:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;864:515:1;;;;;;;;;;;;;;;;;758:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;251:501;471:21;523:4;541:3;558:8;580:11;605;630:10;495:155;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;495:155:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;495:155:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;495:155:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;495:155:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;495:155:1;471:179;;660:12;678:10;660:29;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;660:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;734:10;704:41;;722:10;704:41;;;;;;;;;;;;251:501;;;;;;:::o;864:515::-;960:24;1018:18;:16;:18::i;:::-;1008:6;:28;;1000:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1072:12;1108:6;1087:18;:16;:18::i;:::-;:27;1072:42;;1138:5;1131:4;:12;:27;;1153:5;1131:27;;;1146:4;1131:27;1124:34;;121:2;1175:4;:15;:33;;121:2;1175:33;;;1193:4;1175:33;1168:40;;1242:4;1225:22;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;1225:22:1;;;;1218:29;;1262:9;1274:1;1262:13;;1258:93;1281:4;1277:1;:8;1258:93;;;1316:12;1338:1;1329:6;:10;1316:24;;;;;;;;;;;;;;;;;;;;;;;;;1306:4;1311:1;1306:7;;;;;;;;;;;;;:34;;;;;;;;;;;1287:3;;;;;;;1258:93;;;;1368:4;1361:11;;;864:515;;;;:::o;758:100::-;806:7;832:12;:19;;;;825:26;;758:100;:::o;61:1320::-;;;;;;;;:::o\",\n  \"source\": \"pragma solidity >0.4.23 <0.7.0;\\n\\nimport \\\"./Fundraiser.sol\\\";\\n\\ncontract FundraiserFactory {\\n   uint256 constant maxLimit = 20;\\n   Fundraiser[] private _fundraisers;\\n\\n   event FundraiserCreated(Fundraiser indexed fundraiser, address indexed owner);\\n\\n    function createFundraiser(\\n        string memory name,\\n        string memory url,\\n        string memory imageURL,\\n        string memory description,\\n        address payable beneficiary\\n    )\\n        public\\n    {\\n        Fundraiser fundraiser = new Fundraiser(\\n            name,\\n            url,\\n            imageURL,\\n            description,\\n            beneficiary,\\n            msg.sender\\n        );\\n        _fundraisers.push(fundraiser);\\n        emit FundraiserCreated(fundraiser, msg.sender);\\n    }\\n\\n    function fundraisersCount() public view returns(uint256) {\\n        return _fundraisers.length;\\n    }\\n\\n    function fundraisers(uint256 limit, uint256 offset)\\n        public\\n        view\\n        returns(Fundraiser[] memory coll)\\n    {\\n        require(offset <= fundraisersCount(), \\\"offset out of bounds\\\");\\n\\n        uint256 size = fundraisersCount() - offset;\\n        size = size < limit ? size : limit;\\n        size = size < maxLimit ? size : maxLimit;\\n        coll = new Fundraiser[](size);\\n\\n        for(uint256 i = 0; i < size; i++) {\\n            coll[i] = _fundraisers[offset + i];\\n        }\\n\\n        return coll;\\n    }\\n}\\n\",\n  \"sourcePath\": \"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/FundraiserFactory.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/FundraiserFactory.sol\",\n    \"exportedSymbols\": {\n      \"FundraiserFactory\": [\n        394\n      ]\n    },\n    \"id\": 395,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 256,\n        \"literals\": [\n          \"solidity\",\n          \">\",\n          \"0.4\",\n          \".23\",\n          \"<\",\n          \"0.7\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:31:1\"\n      },\n      {\n        \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/Fundraiser.sol\",\n        \"file\": \"./Fundraiser.sol\",\n        \"id\": 257,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 395,\n        \"sourceUnit\": 255,\n        \"src\": \"33:26:1\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [\n          254\n        ],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 394,\n        \"linearizedBaseContracts\": [\n          394\n        ],\n        \"name\": \"FundraiserFactory\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": true,\n            \"id\": 260,\n            \"name\": \"maxLimit\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 394,\n            \"src\": \"93:30:1\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 258,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"93:7:1\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"3230\",\n              \"id\": 259,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"121:2:1\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_rational_20_by_1\",\n                \"typeString\": \"int_const 20\"\n              },\n              \"value\": \"20\"\n            },\n            \"visibility\": \"internal\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 263,\n            \"name\": \"_fundraisers\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 394,\n            \"src\": \"128:33:1\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_storage\",\n              \"typeString\": \"contract Fundraiser[]\"\n            },\n            \"typeName\": {\n              \"baseType\": {\n                \"contractScope\": null,\n                \"id\": 261,\n                \"name\": \"Fundraiser\",\n                \"nodeType\": \"UserDefinedTypeName\",\n                \"referencedDeclaration\": 254,\n                \"src\": \"128:10:1\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                  \"typeString\": \"contract Fundraiser\"\n                }\n              },\n              \"id\": 262,\n              \"length\": null,\n              \"nodeType\": \"ArrayTypeName\",\n              \"src\": \"128:12:1\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_storage_ptr\",\n                \"typeString\": \"contract Fundraiser[]\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 269,\n            \"name\": \"FundraiserCreated\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 268,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 265,\n                  \"indexed\": true,\n                  \"name\": \"fundraiser\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 269,\n                  \"src\": \"191:29:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                    \"typeString\": \"contract Fundraiser\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 264,\n                    \"name\": \"Fundraiser\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 254,\n                    \"src\": \"191:10:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                      \"typeString\": \"contract Fundraiser\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 267,\n                  \"indexed\": true,\n                  \"name\": \"owner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 269,\n                  \"src\": \"222:21:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 266,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"222:7:1\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"190:54:1\"\n            },\n            \"src\": \"167:78:1\"\n          },\n          {\n            \"body\": {\n              \"id\": 307,\n              \"nodeType\": \"Block\",\n              \"src\": \"461:291:1\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    283\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 283,\n                      \"name\": \"fundraiser\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 307,\n                      \"src\": \"471:21:1\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                        \"typeString\": \"contract Fundraiser\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 282,\n                        \"name\": \"Fundraiser\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 254,\n                        \"src\": \"471:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 294,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 286,\n                        \"name\": \"name\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 271,\n                        \"src\": \"523:4:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 287,\n                        \"name\": \"url\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 273,\n                        \"src\": \"541:3:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 288,\n                        \"name\": \"imageURL\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 275,\n                        \"src\": \"558:8:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 289,\n                        \"name\": \"description\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 277,\n                        \"src\": \"580:11:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 290,\n                        \"name\": \"beneficiary\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 279,\n                        \"src\": \"605:11:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 291,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 710,\n                          \"src\": \"630:3:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 292,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"sender\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"630:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      ],\n                      \"id\": 285,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"NewExpression\",\n                      \"src\": \"495:14:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_creation_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_payable_$_t_address_$returns$_t_contract$_Fundraiser_$254_$\",\n                        \"typeString\": \"function (string memory,string memory,string memory,string memory,address payable,address) returns (contract Fundraiser)\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 284,\n                        \"name\": \"Fundraiser\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 254,\n                        \"src\": \"499:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      }\n                    },\n                    \"id\": 293,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"495:155:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                      \"typeString\": \"contract Fundraiser\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"471:179:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 298,\n                        \"name\": \"fundraiser\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 283,\n                        \"src\": \"678:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 295,\n                        \"name\": \"_fundraisers\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 263,\n                        \"src\": \"660:12:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_storage\",\n                          \"typeString\": \"contract Fundraiser[] storage ref\"\n                        }\n                      },\n                      \"id\": 297,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"push\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"660:17:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_contract$_Fundraiser_$254_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (contract Fundraiser) returns (uint256)\"\n                      }\n                    },\n                    \"id\": 299,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"660:29:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 300,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"660:29:1\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 302,\n                        \"name\": \"fundraiser\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 283,\n                        \"src\": \"722:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 303,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 710,\n                          \"src\": \"734:3:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 304,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"sender\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"734:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                          \"typeString\": \"contract Fundraiser\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      ],\n                      \"id\": 301,\n                      \"name\": \"FundraiserCreated\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 269,\n                      \"src\": \"704:17:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_contract$_Fundraiser_$254_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (contract Fundraiser,address)\"\n                      }\n                    },\n                    \"id\": 305,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"704:41:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 306,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"699:46:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 308,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"createFundraiser\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 280,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 271,\n                  \"name\": \"name\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 308,\n                  \"src\": \"286:18:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 270,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"286:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 273,\n                  \"name\": \"url\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 308,\n                  \"src\": \"314:17:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 272,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"314:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 275,\n                  \"name\": \"imageURL\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 308,\n                  \"src\": \"341:22:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 274,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"341:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 277,\n                  \"name\": \"description\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 308,\n                  \"src\": \"373:25:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 276,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"373:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 279,\n                  \"name\": \"beneficiary\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 308,\n                  \"src\": \"408:27:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"typeName\": {\n                    \"id\": 278,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"408:15:1\",\n                    \"stateMutability\": \"payable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"276:165:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 281,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"461:0:1\"\n            },\n            \"scope\": 394,\n            \"src\": \"251:501:1\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 316,\n              \"nodeType\": \"Block\",\n              \"src\": \"815:43:1\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 313,\n                      \"name\": \"_fundraisers\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 263,\n                      \"src\": \"832:12:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_storage\",\n                        \"typeString\": \"contract Fundraiser[] storage ref\"\n                      }\n                    },\n                    \"id\": 314,\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"length\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"832:19:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 312,\n                  \"id\": 315,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"825:26:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 317,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"fundraisersCount\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 309,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"783:2:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 312,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 311,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 317,\n                  \"src\": \"806:7:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 310,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"806:7:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"805:9:1\"\n            },\n            \"scope\": 394,\n            \"src\": \"758:100:1\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 392,\n              \"nodeType\": \"Block\",\n              \"src\": \"990:389:1\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 331,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 328,\n                          \"name\": \"offset\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 321,\n                          \"src\": \"1008:6:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"<=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [],\n                          \"expression\": {\n                            \"argumentTypes\": [],\n                            \"id\": 329,\n                            \"name\": \"fundraisersCount\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 317,\n                            \"src\": \"1018:16:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_internal_view$__$returns$_t_uint256_$\",\n                              \"typeString\": \"function () view returns (uint256)\"\n                            }\n                          },\n                          \"id\": 330,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1018:18:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"1008:28:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"6f6666736574206f7574206f6620626f756e6473\",\n                        \"id\": 332,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1038:22:1\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_31439bfe95e1d4cf2fd9196e5b66ee2df2a4a2a9519de09bc7c634808a9e727e\",\n                          \"typeString\": \"literal_string \\\"offset out of bounds\\\"\"\n                        },\n                        \"value\": \"offset out of bounds\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_31439bfe95e1d4cf2fd9196e5b66ee2df2a4a2a9519de09bc7c634808a9e727e\",\n                          \"typeString\": \"literal_string \\\"offset out of bounds\\\"\"\n                        }\n                      ],\n                      \"id\": 327,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"1000:7:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 333,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1000:61:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 334,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1000:61:1\"\n                },\n                {\n                  \"assignments\": [\n                    336\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 336,\n                      \"name\": \"size\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 392,\n                      \"src\": \"1072:12:1\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 335,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1072:7:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 341,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 340,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [],\n                      \"expression\": {\n                        \"argumentTypes\": [],\n                        \"id\": 337,\n                        \"name\": \"fundraisersCount\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 317,\n                        \"src\": \"1087:16:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_internal_view$__$returns$_t_uint256_$\",\n                          \"typeString\": \"function () view returns (uint256)\"\n                        }\n                      },\n                      \"id\": 338,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1087:18:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"-\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 339,\n                      \"name\": \"offset\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 321,\n                      \"src\": \"1108:6:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1087:27:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1072:42:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 349,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 342,\n                      \"name\": \"size\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 336,\n                      \"src\": \"1124:4:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"condition\": {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 345,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 343,\n                          \"name\": \"size\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 336,\n                          \"src\": \"1131:4:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"<\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 344,\n                          \"name\": \"limit\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 319,\n                          \"src\": \"1138:5:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"1131:12:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      \"falseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 347,\n                        \"name\": \"limit\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 319,\n                        \"src\": \"1153:5:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 348,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Conditional\",\n                      \"src\": \"1131:27:1\",\n                      \"trueExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 346,\n                        \"name\": \"size\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 336,\n                        \"src\": \"1146:4:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1124:34:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 350,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1124:34:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 358,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 351,\n                      \"name\": \"size\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 336,\n                      \"src\": \"1168:4:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"condition\": {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 354,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 352,\n                          \"name\": \"size\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 336,\n                          \"src\": \"1175:4:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"<\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 353,\n                          \"name\": \"maxLimit\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 260,\n                          \"src\": \"1182:8:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"1175:15:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      \"falseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 356,\n                        \"name\": \"maxLimit\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 260,\n                        \"src\": \"1200:8:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 357,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Conditional\",\n                      \"src\": \"1175:33:1\",\n                      \"trueExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 355,\n                        \"name\": \"size\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 336,\n                        \"src\": \"1193:4:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1168:40:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 359,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1168:40:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 366,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 360,\n                      \"name\": \"coll\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 325,\n                      \"src\": \"1218:4:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_memory_ptr\",\n                        \"typeString\": \"contract Fundraiser[] memory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 364,\n                          \"name\": \"size\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 336,\n                          \"src\": \"1242:4:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"id\": 363,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"NewExpression\",\n                        \"src\": \"1225:16:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_contract$_Fundraiser_$254_$dyn_memory_$\",\n                          \"typeString\": \"function (uint256) pure returns (contract Fundraiser[] memory)\"\n                        },\n                        \"typeName\": {\n                          \"baseType\": {\n                            \"contractScope\": null,\n                            \"id\": 361,\n                            \"name\": \"Fundraiser\",\n                            \"nodeType\": \"UserDefinedTypeName\",\n                            \"referencedDeclaration\": 254,\n                            \"src\": \"1229:10:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          },\n                          \"id\": 362,\n                          \"length\": null,\n                          \"nodeType\": \"ArrayTypeName\",\n                          \"src\": \"1229:12:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_storage_ptr\",\n                            \"typeString\": \"contract Fundraiser[]\"\n                          }\n                        }\n                      },\n                      \"id\": 365,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1225:22:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_memory\",\n                        \"typeString\": \"contract Fundraiser[] memory\"\n                      }\n                    },\n                    \"src\": \"1218:29:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_memory_ptr\",\n                      \"typeString\": \"contract Fundraiser[] memory\"\n                    }\n                  },\n                  \"id\": 367,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1218:29:1\"\n                },\n                {\n                  \"body\": {\n                    \"id\": 388,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"1292:59:1\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 386,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 378,\n                              \"name\": \"coll\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 325,\n                              \"src\": \"1306:4:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_memory_ptr\",\n                                \"typeString\": \"contract Fundraiser[] memory\"\n                              }\n                            },\n                            \"id\": 380,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 379,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 369,\n                              \"src\": \"1311:1:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"1306:7:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 381,\n                              \"name\": \"_fundraisers\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 263,\n                              \"src\": \"1316:12:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_storage\",\n                                \"typeString\": \"contract Fundraiser[] storage ref\"\n                              }\n                            },\n                            \"id\": 385,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"id\": 384,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 382,\n                                \"name\": \"offset\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 321,\n                                \"src\": \"1329:6:1\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \"+\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 383,\n                                \"name\": \"i\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 369,\n                                \"src\": \"1338:1:1\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"src\": \"1329:10:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"1316:24:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          },\n                          \"src\": \"1306:34:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                            \"typeString\": \"contract Fundraiser\"\n                          }\n                        },\n                        \"id\": 387,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"1306:34:1\"\n                      }\n                    ]\n                  },\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 374,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 372,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 369,\n                      \"src\": \"1277:1:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 373,\n                      \"name\": \"size\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 336,\n                      \"src\": \"1281:4:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1277:8:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 389,\n                  \"initializationExpression\": {\n                    \"assignments\": [\n                      369\n                    ],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 369,\n                        \"name\": \"i\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"scope\": 389,\n                        \"src\": \"1262:9:1\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 368,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"1262:7:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 371,\n                    \"initialValue\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 370,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1274:1:1\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"1262:13:1\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 376,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": false,\n                      \"src\": \"1287:3:1\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 375,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 369,\n                        \"src\": \"1287:1:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 377,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"1287:3:1\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"1258:93:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 390,\n                    \"name\": \"coll\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 325,\n                    \"src\": \"1368:4:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_memory_ptr\",\n                      \"typeString\": \"contract Fundraiser[] memory\"\n                    }\n                  },\n                  \"functionReturnParameters\": 326,\n                  \"id\": 391,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1361:11:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 393,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"fundraisers\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 322,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 319,\n                  \"name\": \"limit\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 393,\n                  \"src\": \"885:13:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 318,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"885:7:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 321,\n                  \"name\": \"offset\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 393,\n                  \"src\": \"900:14:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 320,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"900:7:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"884:31:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 326,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 325,\n                  \"name\": \"coll\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 393,\n                  \"src\": \"960:24:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_memory_ptr\",\n                    \"typeString\": \"contract Fundraiser[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"contractScope\": null,\n                      \"id\": 323,\n                      \"name\": \"Fundraiser\",\n                      \"nodeType\": \"UserDefinedTypeName\",\n                      \"referencedDeclaration\": 254,\n                      \"src\": \"960:10:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                        \"typeString\": \"contract Fundraiser\"\n                      }\n                    },\n                    \"id\": 324,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"960:12:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_storage_ptr\",\n                      \"typeString\": \"contract Fundraiser[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"959:26:1\"\n            },\n            \"scope\": 394,\n            \"src\": \"864:515:1\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          }\n        ],\n        \"scope\": 395,\n        \"src\": \"61:1320:1\"\n      }\n    ],\n    \"src\": \"0:1382:1\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/FundraiserFactory.sol\",\n    \"exportedSymbols\": {\n      \"FundraiserFactory\": [\n        394\n      ]\n    },\n    \"id\": 395,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 256,\n        \"literals\": [\n          \"solidity\",\n          \">\",\n          \"0.4\",\n          \".23\",\n          \"<\",\n          \"0.7\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:31:1\"\n      },\n      {\n        \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/Fundraiser.sol\",\n        \"file\": \"./Fundraiser.sol\",\n        \"id\": 257,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 395,\n        \"sourceUnit\": 255,\n        \"src\": \"33:26:1\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [\n          254\n        ],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 394,\n        \"linearizedBaseContracts\": [\n          394\n        ],\n        \"name\": \"FundraiserFactory\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": true,\n            \"id\": 260,\n            \"name\": \"maxLimit\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 394,\n            \"src\": \"93:30:1\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 258,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"93:7:1\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"3230\",\n              \"id\": 259,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"121:2:1\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_rational_20_by_1\",\n                \"typeString\": \"int_const 20\"\n              },\n              \"value\": \"20\"\n            },\n            \"visibility\": \"internal\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 263,\n            \"name\": \"_fundraisers\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 394,\n            \"src\": \"128:33:1\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_storage\",\n              \"typeString\": \"contract Fundraiser[]\"\n            },\n            \"typeName\": {\n              \"baseType\": {\n                \"contractScope\": null,\n                \"id\": 261,\n                \"name\": \"Fundraiser\",\n                \"nodeType\": \"UserDefinedTypeName\",\n                \"referencedDeclaration\": 254,\n                \"src\": \"128:10:1\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                  \"typeString\": \"contract Fundraiser\"\n                }\n              },\n              \"id\": 262,\n              \"length\": null,\n              \"nodeType\": \"ArrayTypeName\",\n              \"src\": \"128:12:1\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_storage_ptr\",\n                \"typeString\": \"contract Fundraiser[]\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 269,\n            \"name\": \"FundraiserCreated\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 268,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 265,\n                  \"indexed\": true,\n                  \"name\": \"fundraiser\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 269,\n                  \"src\": \"191:29:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                    \"typeString\": \"contract Fundraiser\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 264,\n                    \"name\": \"Fundraiser\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 254,\n                    \"src\": \"191:10:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                      \"typeString\": \"contract Fundraiser\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 267,\n                  \"indexed\": true,\n                  \"name\": \"owner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 269,\n                  \"src\": \"222:21:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 266,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"222:7:1\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"190:54:1\"\n            },\n            \"src\": \"167:78:1\"\n          },\n          {\n            \"body\": {\n              \"id\": 307,\n              \"nodeType\": \"Block\",\n              \"src\": \"461:291:1\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    283\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 283,\n                      \"name\": \"fundraiser\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 307,\n                      \"src\": \"471:21:1\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                        \"typeString\": \"contract Fundraiser\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 282,\n                        \"name\": \"Fundraiser\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 254,\n                        \"src\": \"471:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 294,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 286,\n                        \"name\": \"name\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 271,\n                        \"src\": \"523:4:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 287,\n                        \"name\": \"url\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 273,\n                        \"src\": \"541:3:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 288,\n                        \"name\": \"imageURL\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 275,\n                        \"src\": \"558:8:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 289,\n                        \"name\": \"description\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 277,\n                        \"src\": \"580:11:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 290,\n                        \"name\": \"beneficiary\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 279,\n                        \"src\": \"605:11:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 291,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 710,\n                          \"src\": \"630:3:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 292,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"sender\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"630:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      ],\n                      \"id\": 285,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"NewExpression\",\n                      \"src\": \"495:14:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_creation_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_payable_$_t_address_$returns$_t_contract$_Fundraiser_$254_$\",\n                        \"typeString\": \"function (string memory,string memory,string memory,string memory,address payable,address) returns (contract Fundraiser)\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 284,\n                        \"name\": \"Fundraiser\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 254,\n                        \"src\": \"499:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      }\n                    },\n                    \"id\": 293,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"495:155:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                      \"typeString\": \"contract Fundraiser\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"471:179:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 298,\n                        \"name\": \"fundraiser\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 283,\n                        \"src\": \"678:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 295,\n                        \"name\": \"_fundraisers\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 263,\n                        \"src\": \"660:12:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_storage\",\n                          \"typeString\": \"contract Fundraiser[] storage ref\"\n                        }\n                      },\n                      \"id\": 297,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"push\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"660:17:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_contract$_Fundraiser_$254_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (contract Fundraiser) returns (uint256)\"\n                      }\n                    },\n                    \"id\": 299,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"660:29:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 300,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"660:29:1\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 302,\n                        \"name\": \"fundraiser\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 283,\n                        \"src\": \"722:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 303,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 710,\n                          \"src\": \"734:3:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 304,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"sender\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"734:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                          \"typeString\": \"contract Fundraiser\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      ],\n                      \"id\": 301,\n                      \"name\": \"FundraiserCreated\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 269,\n                      \"src\": \"704:17:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_contract$_Fundraiser_$254_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (contract Fundraiser,address)\"\n                      }\n                    },\n                    \"id\": 305,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"704:41:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 306,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"699:46:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 308,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"createFundraiser\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 280,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 271,\n                  \"name\": \"name\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 308,\n                  \"src\": \"286:18:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 270,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"286:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 273,\n                  \"name\": \"url\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 308,\n                  \"src\": \"314:17:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 272,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"314:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 275,\n                  \"name\": \"imageURL\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 308,\n                  \"src\": \"341:22:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 274,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"341:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 277,\n                  \"name\": \"description\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 308,\n                  \"src\": \"373:25:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 276,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"373:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 279,\n                  \"name\": \"beneficiary\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 308,\n                  \"src\": \"408:27:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"typeName\": {\n                    \"id\": 278,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"408:15:1\",\n                    \"stateMutability\": \"payable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"276:165:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 281,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"461:0:1\"\n            },\n            \"scope\": 394,\n            \"src\": \"251:501:1\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 316,\n              \"nodeType\": \"Block\",\n              \"src\": \"815:43:1\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 313,\n                      \"name\": \"_fundraisers\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 263,\n                      \"src\": \"832:12:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_storage\",\n                        \"typeString\": \"contract Fundraiser[] storage ref\"\n                      }\n                    },\n                    \"id\": 314,\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"length\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"832:19:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 312,\n                  \"id\": 315,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"825:26:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 317,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"fundraisersCount\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 309,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"783:2:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 312,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 311,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 317,\n                  \"src\": \"806:7:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 310,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"806:7:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"805:9:1\"\n            },\n            \"scope\": 394,\n            \"src\": \"758:100:1\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 392,\n              \"nodeType\": \"Block\",\n              \"src\": \"990:389:1\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 331,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 328,\n                          \"name\": \"offset\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 321,\n                          \"src\": \"1008:6:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"<=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [],\n                          \"expression\": {\n                            \"argumentTypes\": [],\n                            \"id\": 329,\n                            \"name\": \"fundraisersCount\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 317,\n                            \"src\": \"1018:16:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_internal_view$__$returns$_t_uint256_$\",\n                              \"typeString\": \"function () view returns (uint256)\"\n                            }\n                          },\n                          \"id\": 330,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1018:18:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"1008:28:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"6f6666736574206f7574206f6620626f756e6473\",\n                        \"id\": 332,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1038:22:1\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_31439bfe95e1d4cf2fd9196e5b66ee2df2a4a2a9519de09bc7c634808a9e727e\",\n                          \"typeString\": \"literal_string \\\"offset out of bounds\\\"\"\n                        },\n                        \"value\": \"offset out of bounds\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_31439bfe95e1d4cf2fd9196e5b66ee2df2a4a2a9519de09bc7c634808a9e727e\",\n                          \"typeString\": \"literal_string \\\"offset out of bounds\\\"\"\n                        }\n                      ],\n                      \"id\": 327,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"1000:7:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 333,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1000:61:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 334,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1000:61:1\"\n                },\n                {\n                  \"assignments\": [\n                    336\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 336,\n                      \"name\": \"size\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 392,\n                      \"src\": \"1072:12:1\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 335,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1072:7:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 341,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 340,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [],\n                      \"expression\": {\n                        \"argumentTypes\": [],\n                        \"id\": 337,\n                        \"name\": \"fundraisersCount\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 317,\n                        \"src\": \"1087:16:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_internal_view$__$returns$_t_uint256_$\",\n                          \"typeString\": \"function () view returns (uint256)\"\n                        }\n                      },\n                      \"id\": 338,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1087:18:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"-\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 339,\n                      \"name\": \"offset\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 321,\n                      \"src\": \"1108:6:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1087:27:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1072:42:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 349,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 342,\n                      \"name\": \"size\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 336,\n                      \"src\": \"1124:4:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"condition\": {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 345,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 343,\n                          \"name\": \"size\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 336,\n                          \"src\": \"1131:4:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"<\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 344,\n                          \"name\": \"limit\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 319,\n                          \"src\": \"1138:5:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"1131:12:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      \"falseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 347,\n                        \"name\": \"limit\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 319,\n                        \"src\": \"1153:5:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 348,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Conditional\",\n                      \"src\": \"1131:27:1\",\n                      \"trueExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 346,\n                        \"name\": \"size\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 336,\n                        \"src\": \"1146:4:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1124:34:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 350,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1124:34:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 358,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 351,\n                      \"name\": \"size\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 336,\n                      \"src\": \"1168:4:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"condition\": {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 354,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 352,\n                          \"name\": \"size\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 336,\n                          \"src\": \"1175:4:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"<\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 353,\n                          \"name\": \"maxLimit\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 260,\n                          \"src\": \"1182:8:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"1175:15:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      \"falseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 356,\n                        \"name\": \"maxLimit\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 260,\n                        \"src\": \"1200:8:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 357,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Conditional\",\n                      \"src\": \"1175:33:1\",\n                      \"trueExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 355,\n                        \"name\": \"size\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 336,\n                        \"src\": \"1193:4:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1168:40:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 359,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1168:40:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 366,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 360,\n                      \"name\": \"coll\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 325,\n                      \"src\": \"1218:4:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_memory_ptr\",\n                        \"typeString\": \"contract Fundraiser[] memory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 364,\n                          \"name\": \"size\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 336,\n                          \"src\": \"1242:4:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"id\": 363,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"NewExpression\",\n                        \"src\": \"1225:16:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_contract$_Fundraiser_$254_$dyn_memory_$\",\n                          \"typeString\": \"function (uint256) pure returns (contract Fundraiser[] memory)\"\n                        },\n                        \"typeName\": {\n                          \"baseType\": {\n                            \"contractScope\": null,\n                            \"id\": 361,\n                            \"name\": \"Fundraiser\",\n                            \"nodeType\": \"UserDefinedTypeName\",\n                            \"referencedDeclaration\": 254,\n                            \"src\": \"1229:10:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          },\n                          \"id\": 362,\n                          \"length\": null,\n                          \"nodeType\": \"ArrayTypeName\",\n                          \"src\": \"1229:12:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_storage_ptr\",\n                            \"typeString\": \"contract Fundraiser[]\"\n                          }\n                        }\n                      },\n                      \"id\": 365,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1225:22:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_memory\",\n                        \"typeString\": \"contract Fundraiser[] memory\"\n                      }\n                    },\n                    \"src\": \"1218:29:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_memory_ptr\",\n                      \"typeString\": \"contract Fundraiser[] memory\"\n                    }\n                  },\n                  \"id\": 367,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1218:29:1\"\n                },\n                {\n                  \"body\": {\n                    \"id\": 388,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"1292:59:1\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 386,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 378,\n                              \"name\": \"coll\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 325,\n                              \"src\": \"1306:4:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_memory_ptr\",\n                                \"typeString\": \"contract Fundraiser[] memory\"\n                              }\n                            },\n                            \"id\": 380,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 379,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 369,\n                              \"src\": \"1311:1:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"1306:7:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 381,\n                              \"name\": \"_fundraisers\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 263,\n                              \"src\": \"1316:12:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_storage\",\n                                \"typeString\": \"contract Fundraiser[] storage ref\"\n                              }\n                            },\n                            \"id\": 385,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"id\": 384,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 382,\n                                \"name\": \"offset\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 321,\n                                \"src\": \"1329:6:1\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \"+\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 383,\n                                \"name\": \"i\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 369,\n                                \"src\": \"1338:1:1\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"src\": \"1329:10:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"1316:24:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          },\n                          \"src\": \"1306:34:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                            \"typeString\": \"contract Fundraiser\"\n                          }\n                        },\n                        \"id\": 387,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"1306:34:1\"\n                      }\n                    ]\n                  },\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 374,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 372,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 369,\n                      \"src\": \"1277:1:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 373,\n                      \"name\": \"size\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 336,\n                      \"src\": \"1281:4:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1277:8:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 389,\n                  \"initializationExpression\": {\n                    \"assignments\": [\n                      369\n                    ],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 369,\n                        \"name\": \"i\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"scope\": 389,\n                        \"src\": \"1262:9:1\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 368,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"1262:7:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 371,\n                    \"initialValue\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 370,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1274:1:1\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"1262:13:1\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 376,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": false,\n                      \"src\": \"1287:3:1\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 375,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 369,\n                        \"src\": \"1287:1:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 377,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"1287:3:1\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"1258:93:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 390,\n                    \"name\": \"coll\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 325,\n                    \"src\": \"1368:4:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_memory_ptr\",\n                      \"typeString\": \"contract Fundraiser[] memory\"\n                    }\n                  },\n                  \"functionReturnParameters\": 326,\n                  \"id\": 391,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1361:11:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 393,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"fundraisers\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 322,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 319,\n                  \"name\": \"limit\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 393,\n                  \"src\": \"885:13:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 318,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"885:7:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 321,\n                  \"name\": \"offset\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 393,\n                  \"src\": \"900:14:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 320,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"900:7:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"884:31:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 326,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 325,\n                  \"name\": \"coll\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 393,\n                  \"src\": \"960:24:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_memory_ptr\",\n                    \"typeString\": \"contract Fundraiser[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"contractScope\": null,\n                      \"id\": 323,\n                      \"name\": \"Fundraiser\",\n                      \"nodeType\": \"UserDefinedTypeName\",\n                      \"referencedDeclaration\": 254,\n                      \"src\": \"960:10:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Fundraiser_$254\",\n                        \"typeString\": \"contract Fundraiser\"\n                      }\n                    },\n                    \"id\": 324,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"960:12:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$254_$dyn_storage_ptr\",\n                      \"typeString\": \"contract Fundraiser[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"959:26:1\"\n            },\n            \"scope\": 394,\n            \"src\": \"864:515:1\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          }\n        ],\n        \"scope\": 395,\n        \"src\": \"61:1320:1\"\n      }\n    ],\n    \"src\": \"0:1382:1\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.5.8+commit.23d335f2.Emscripten.clang\"\n  },\n  \"networks\": {\n    \"5777\": {\n      \"events\": {\n        \"0xa2398daac0c8053a1e3c0280916c2ec6bc884f0959c27e639a4db829b7eabfb1\": {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"name\": \"fundraiser\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"name\": \"owner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"FundraiserCreated\",\n          \"type\": \"event\",\n          \"signature\": \"0xa2398daac0c8053a1e3c0280916c2ec6bc884f0959c27e639a4db829b7eabfb1\"\n        }\n      },\n      \"links\": {},\n      \"address\": \"0x044d2473E5e4346e2e183DEae925A6963E1a3640\",\n      \"transactionHash\": \"0x0e1b12fc622eabb457e59a480564deab151c64c39072caa77f53420ec266b960\"\n    }\n  },\n  \"schemaVersion\": \"3.0.16\",\n  \"updatedAt\": \"2019-10-10T05:34:38.086Z\",\n  \"devdoc\": {\n    \"methods\": {}\n  },\n  \"userdoc\": {\n    \"methods\": {}\n  }\n}"
  },
  {
    "path": "chapter-10+11/client/src/contracts/Migrations.json",
    "content": "{\n  \"contractName\": \"Migrations\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"last_completed_migration\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"completed\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setCompleted\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"new_address\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"upgrade\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"new_address\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"upgrade\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"last_completed_migration\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"completed\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setCompleted\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{}},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/Migrations.sol\\\":\\\"Migrations\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/Migrations.sol\\\":{\\\"keccak256\\\":\\\"0xf65fcb01f4b8ef6909f55bccf7f05ab483d953e671e205d9ce8ea6a9adc3c653\\\",\\\"urls\\\":[\\\"bzzr://ea0687984a75ca6b8aa89a3ba439fa3123a53421a5b5474320c74ad1174583fc\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102ae806100606000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630900f01014610051578063445df0ac146100955780638da5cb5b146100b3578063fdacd576146100fd575b600080fd5b6100936004803603602081101561006757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061012b565b005b61009d6101f7565b6040518082815260200191505060405180910390f35b6100bb6101fd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101296004803603602081101561011357600080fd5b8101908080359060200190929190505050610222565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101f45760008190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156101da57600080fd5b505af11580156101ee573d6000803e3d6000fd5b50505050505b50565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561027f57806001819055505b5056fea165627a7a72305820a53fe5b964624d5e7a9902782b7acf85b45a9394624f5028b3c3d47da62a61b90029\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80630900f01014610051578063445df0ac146100955780638da5cb5b146100b3578063fdacd576146100fd575b600080fd5b6100936004803603602081101561006757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061012b565b005b61009d6101f7565b6040518082815260200191505060405180910390f35b6100bb6101fd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101296004803603602081101561011357600080fd5b8101908080359060200190929190505050610222565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101f45760008190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156101da57600080fd5b505af11580156101ee573d6000803e3d6000fd5b50505050505b50565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561027f57806001819055505b5056fea165627a7a72305820a53fe5b964624d5e7a9902782b7acf85b45a9394624f5028b3c3d47da62a61b90029\",\n  \"sourceMap\": \"25:480:2:-;;;177:50;8:9:-1;5:2;;;30:1;27;20:12;5:2;177:50:2;212:10;204:5;;:18;;;;;;;;;;;;;;;;;;25:480;;;;;;\",\n  \"deployedSourceMap\": \"25:480:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25:480:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;338:165;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;338:165:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;73:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;231:103;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;231:103:2;;;;;;;;;;;;;;;;;:::i;:::-;;338:165;160:5;;;;;;;;;;;146:19;;:10;:19;;;142:26;;;400:19;433:11;400:45;;451:8;:21;;;473:24;;451:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;451:47:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;451:47:2;;;;167:1;142:26;338:165;:::o;73:36::-;;;;:::o;49:20::-;;;;;;;;;;;;;:::o;231:103::-;160:5;;;;;;;;;;;146:19;;:10;:19;;;142:26;;;320:9;293:24;:36;;;;142:26;231:103;:::o\",\n  \"source\": \"pragma solidity ^0.5.0;\\n\\ncontract Migrations {\\n  address public owner;\\n  uint public last_completed_migration;\\n\\n  modifier restricted() {\\n    if (msg.sender == owner) _;\\n  }\\n\\n  constructor() public {\\n    owner = msg.sender;\\n  }\\n\\n  function setCompleted(uint completed) public restricted {\\n    last_completed_migration = completed;\\n  }\\n\\n  function upgrade(address new_address) public restricted {\\n    Migrations upgraded = Migrations(new_address);\\n    upgraded.setCompleted(last_completed_migration);\\n  }\\n}\\n\",\n  \"sourcePath\": \"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/Migrations.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/Migrations.sol\",\n    \"exportedSymbols\": {\n      \"Migrations\": [\n        451\n      ]\n    },\n    \"id\": 452,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 396,\n        \"literals\": [\n          \"solidity\",\n          \"^\",\n          \"0.5\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:2\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 451,\n        \"linearizedBaseContracts\": [\n          451\n        ],\n        \"name\": \"Migrations\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 398,\n            \"name\": \"owner\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 451,\n            \"src\": \"49:20:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 397,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"49:7:2\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 400,\n            \"name\": \"last_completed_migration\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 451,\n            \"src\": \"73:36:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 399,\n              \"name\": \"uint\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"73:4:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 408,\n              \"nodeType\": \"Block\",\n              \"src\": \"136:37:2\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 405,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 402,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 710,\n                        \"src\": \"146:3:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 403,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"146:10:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 404,\n                      \"name\": \"owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 398,\n                      \"src\": \"160:5:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"146:19:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 407,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"142:26:2\",\n                  \"trueBody\": {\n                    \"id\": 406,\n                    \"nodeType\": \"PlaceholderStatement\",\n                    \"src\": \"167:1:2\"\n                  }\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 409,\n            \"name\": \"restricted\",\n            \"nodeType\": \"ModifierDefinition\",\n            \"parameters\": {\n              \"id\": 401,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"133:2:2\"\n            },\n            \"src\": \"114:59:2\",\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 417,\n              \"nodeType\": \"Block\",\n              \"src\": \"198:29:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 415,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 412,\n                      \"name\": \"owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 398,\n                      \"src\": \"204:5:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 413,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 710,\n                        \"src\": \"212:3:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 414,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"212:10:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"204:18:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 416,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"204:18:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 418,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 410,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"188:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 411,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"198:0:2\"\n            },\n            \"scope\": 451,\n            \"src\": \"177:50:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 429,\n              \"nodeType\": \"Block\",\n              \"src\": \"287:47:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 427,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 425,\n                      \"name\": \"last_completed_migration\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 400,\n                      \"src\": \"293:24:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 426,\n                      \"name\": \"completed\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 420,\n                      \"src\": \"320:9:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"293:36:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 428,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"293:36:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 430,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 423,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 422,\n                  \"name\": \"restricted\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 409,\n                  \"src\": \"276:10:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"276:10:2\"\n              }\n            ],\n            \"name\": \"setCompleted\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 421,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 420,\n                  \"name\": \"completed\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 430,\n                  \"src\": \"253:14:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 419,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"253:4:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"252:16:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 424,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"287:0:2\"\n            },\n            \"scope\": 451,\n            \"src\": \"231:103:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 449,\n              \"nodeType\": \"Block\",\n              \"src\": \"394:109:2\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    438\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 438,\n                      \"name\": \"upgraded\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 449,\n                      \"src\": \"400:19:2\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Migrations_$451\",\n                        \"typeString\": \"contract Migrations\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 437,\n                        \"name\": \"Migrations\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 451,\n                        \"src\": \"400:10:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Migrations_$451\",\n                          \"typeString\": \"contract Migrations\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 442,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 440,\n                        \"name\": \"new_address\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 432,\n                        \"src\": \"433:11:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 439,\n                      \"name\": \"Migrations\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 451,\n                      \"src\": \"422:10:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_contract$_Migrations_$451_$\",\n                        \"typeString\": \"type(contract Migrations)\"\n                      }\n                    },\n                    \"id\": 441,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"422:23:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Migrations_$451\",\n                      \"typeString\": \"contract Migrations\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"400:45:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 446,\n                        \"name\": \"last_completed_migration\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 400,\n                        \"src\": \"473:24:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 443,\n                        \"name\": \"upgraded\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 438,\n                        \"src\": \"451:8:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Migrations_$451\",\n                          \"typeString\": \"contract Migrations\"\n                        }\n                      },\n                      \"id\": 445,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"setCompleted\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 430,\n                      \"src\": \"451:21:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_nonpayable$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (uint256) external\"\n                      }\n                    },\n                    \"id\": 447,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"451:47:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 448,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"451:47:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 450,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 435,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 434,\n                  \"name\": \"restricted\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 409,\n                  \"src\": \"383:10:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"383:10:2\"\n              }\n            ],\n            \"name\": \"upgrade\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 433,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 432,\n                  \"name\": \"new_address\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 450,\n                  \"src\": \"355:19:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 431,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"355:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"354:21:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 436,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"394:0:2\"\n            },\n            \"scope\": 451,\n            \"src\": \"338:165:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          }\n        ],\n        \"scope\": 452,\n        \"src\": \"25:480:2\"\n      }\n    ],\n    \"src\": \"0:506:2\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/hoscdev/chapter-10+11/contracts/Migrations.sol\",\n    \"exportedSymbols\": {\n      \"Migrations\": [\n        451\n      ]\n    },\n    \"id\": 452,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 396,\n        \"literals\": [\n          \"solidity\",\n          \"^\",\n          \"0.5\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:2\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 451,\n        \"linearizedBaseContracts\": [\n          451\n        ],\n        \"name\": \"Migrations\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 398,\n            \"name\": \"owner\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 451,\n            \"src\": \"49:20:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 397,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"49:7:2\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 400,\n            \"name\": \"last_completed_migration\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 451,\n            \"src\": \"73:36:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 399,\n              \"name\": \"uint\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"73:4:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 408,\n              \"nodeType\": \"Block\",\n              \"src\": \"136:37:2\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 405,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 402,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 710,\n                        \"src\": \"146:3:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 403,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"146:10:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 404,\n                      \"name\": \"owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 398,\n                      \"src\": \"160:5:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"146:19:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 407,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"142:26:2\",\n                  \"trueBody\": {\n                    \"id\": 406,\n                    \"nodeType\": \"PlaceholderStatement\",\n                    \"src\": \"167:1:2\"\n                  }\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 409,\n            \"name\": \"restricted\",\n            \"nodeType\": \"ModifierDefinition\",\n            \"parameters\": {\n              \"id\": 401,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"133:2:2\"\n            },\n            \"src\": \"114:59:2\",\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 417,\n              \"nodeType\": \"Block\",\n              \"src\": \"198:29:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 415,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 412,\n                      \"name\": \"owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 398,\n                      \"src\": \"204:5:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 413,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 710,\n                        \"src\": \"212:3:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 414,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"212:10:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"204:18:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 416,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"204:18:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 418,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 410,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"188:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 411,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"198:0:2\"\n            },\n            \"scope\": 451,\n            \"src\": \"177:50:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 429,\n              \"nodeType\": \"Block\",\n              \"src\": \"287:47:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 427,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 425,\n                      \"name\": \"last_completed_migration\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 400,\n                      \"src\": \"293:24:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 426,\n                      \"name\": \"completed\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 420,\n                      \"src\": \"320:9:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"293:36:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 428,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"293:36:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 430,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 423,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 422,\n                  \"name\": \"restricted\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 409,\n                  \"src\": \"276:10:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"276:10:2\"\n              }\n            ],\n            \"name\": \"setCompleted\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 421,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 420,\n                  \"name\": \"completed\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 430,\n                  \"src\": \"253:14:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 419,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"253:4:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"252:16:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 424,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"287:0:2\"\n            },\n            \"scope\": 451,\n            \"src\": \"231:103:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 449,\n              \"nodeType\": \"Block\",\n              \"src\": \"394:109:2\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    438\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 438,\n                      \"name\": \"upgraded\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 449,\n                      \"src\": \"400:19:2\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Migrations_$451\",\n                        \"typeString\": \"contract Migrations\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 437,\n                        \"name\": \"Migrations\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 451,\n                        \"src\": \"400:10:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Migrations_$451\",\n                          \"typeString\": \"contract Migrations\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 442,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 440,\n                        \"name\": \"new_address\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 432,\n                        \"src\": \"433:11:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 439,\n                      \"name\": \"Migrations\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 451,\n                      \"src\": \"422:10:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_contract$_Migrations_$451_$\",\n                        \"typeString\": \"type(contract Migrations)\"\n                      }\n                    },\n                    \"id\": 441,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"422:23:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Migrations_$451\",\n                      \"typeString\": \"contract Migrations\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"400:45:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 446,\n                        \"name\": \"last_completed_migration\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 400,\n                        \"src\": \"473:24:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 443,\n                        \"name\": \"upgraded\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 438,\n                        \"src\": \"451:8:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Migrations_$451\",\n                          \"typeString\": \"contract Migrations\"\n                        }\n                      },\n                      \"id\": 445,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"setCompleted\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 430,\n                      \"src\": \"451:21:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_nonpayable$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (uint256) external\"\n                      }\n                    },\n                    \"id\": 447,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"451:47:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 448,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"451:47:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 450,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 435,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 434,\n                  \"name\": \"restricted\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 409,\n                  \"src\": \"383:10:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"383:10:2\"\n              }\n            ],\n            \"name\": \"upgrade\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 433,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 432,\n                  \"name\": \"new_address\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 450,\n                  \"src\": \"355:19:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 431,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"355:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"354:21:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 436,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"394:0:2\"\n            },\n            \"scope\": 451,\n            \"src\": \"338:165:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          }\n        ],\n        \"scope\": 452,\n        \"src\": \"25:480:2\"\n      }\n    ],\n    \"src\": \"0:506:2\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.5.8+commit.23d335f2.Emscripten.clang\"\n  },\n  \"networks\": {\n    \"5777\": {\n      \"events\": {},\n      \"links\": {},\n      \"address\": \"0x5736072ebAeC61cf47a7E3399BA8cAC23C4ac984\",\n      \"transactionHash\": \"0xcd71a19f1b2d7613ea8992829556b529e0b3da40e74e58894f37cadb6ee4e50c\"\n    }\n  },\n  \"schemaVersion\": \"3.0.16\",\n  \"updatedAt\": \"2019-10-10T05:34:38.087Z\",\n  \"devdoc\": {\n    \"methods\": {}\n  },\n  \"userdoc\": {\n    \"methods\": {}\n  }\n}"
  },
  {
    "path": "chapter-10+11/client/src/contracts/Ownable.json",
    "content": "{\n  \"contractName\": \"Ownable\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"isOwner\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isOwner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"}],\\\"devdoc\\\":{\\\"details\\\":\\\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. * This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be aplied to your functions to restrict their use to the owner.\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Initializes the contract setting the deployer as the initial owner.\\\"},\\\"isOwner()\\\":{\\\"details\\\":\\\"Returns true if the caller is the current owner.\\\"},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}}},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"openzeppelin-solidity/contracts/ownership/Ownable.sol\\\":\\\"Ownable\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"openzeppelin-solidity/contracts/ownership/Ownable.sol\\\":{\\\"keccak256\\\":\\\"0xf79fb10e8235770eb4aea7249034076a3cc9f9119ad944fc48705bae9c9d20dc\\\",\\\"urls\\\":[\\\"bzzr://d12a11272051eb6586de8f7e0a82c04a98c9984ce8b2a6cf1ee439f65aba29a9\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x\",\n  \"deployedBytecode\": \"0x\",\n  \"sourceMap\": \"\",\n  \"deployedSourceMap\": \"\",\n  \"source\": \"pragma solidity ^0.5.0;\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be aplied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor () internal {\\n        _owner = msg.sender;\\n        emit OwnershipTransferred(address(0), _owner);\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        require(isOwner(), \\\"Ownable: caller is not the owner\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the caller is the current owner.\\n     */\\n    function isOwner() public view returns (bool) {\\n        return msg.sender == _owner;\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * > Note: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public onlyOwner {\\n        emit OwnershipTransferred(_owner, address(0));\\n        _owner = address(0);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public onlyOwner {\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     */\\n    function _transferOwnership(address newOwner) internal {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        emit OwnershipTransferred(_owner, newOwner);\\n        _owner = newOwner;\\n    }\\n}\\n\",\n  \"sourcePath\": \"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\n  \"ast\": {\n    \"absolutePath\": \"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\n    \"exportedSymbols\": {\n      \"Ownable\": [\n        695\n      ]\n    },\n    \"id\": 696,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 586,\n        \"literals\": [\n          \"solidity\",\n          \"^\",\n          \"0.5\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:4\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": \"@dev Contract module which provides a basic access control mechanism, where\\nthere is an account (an owner) that can be granted exclusive access to\\nspecific functions.\\n * This module is used through inheritance. It will make available the modifier\\n`onlyOwner`, which can be aplied to your functions to restrict their use to\\nthe owner.\",\n        \"fullyImplemented\": true,\n        \"id\": 695,\n        \"linearizedBaseContracts\": [\n          695\n        ],\n        \"name\": \"Ownable\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 588,\n            \"name\": \"_owner\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 695,\n            \"src\": \"408:22:4\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 587,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"408:7:4\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 594,\n            \"name\": \"OwnershipTransferred\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 593,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 590,\n                  \"indexed\": true,\n                  \"name\": \"previousOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 594,\n                  \"src\": \"464:29:4\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 589,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"464:7:4\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 592,\n                  \"indexed\": true,\n                  \"name\": \"newOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 594,\n                  \"src\": \"495:24:4\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 591,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"495:7:4\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"463:57:4\"\n            },\n            \"src\": \"437:84:4\"\n          },\n          {\n            \"body\": {\n              \"id\": 609,\n              \"nodeType\": \"Block\",\n              \"src\": \"647:91:4\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 600,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 597,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 588,\n                      \"src\": \"657:6:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 598,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 710,\n                        \"src\": \"666:3:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 599,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"666:10:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"657:19:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 601,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"657:19:4\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 604,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"720:1:4\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            }\n                          ],\n                          \"id\": 603,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"712:7:4\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": \"address\"\n                        },\n                        \"id\": 605,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"712:10:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 606,\n                        \"name\": \"_owner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 588,\n                        \"src\": \"724:6:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 602,\n                      \"name\": \"OwnershipTransferred\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 594,\n                      \"src\": \"691:20:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 607,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"691:40:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 608,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"686:45:4\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Initializes the contract setting the deployer as the initial owner.\",\n            \"id\": 610,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 595,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"635:2:4\"\n            },\n            \"returnParameters\": {\n              \"id\": 596,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"647:0:4\"\n            },\n            \"scope\": 695,\n            \"src\": \"623:115:4\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 617,\n              \"nodeType\": \"Block\",\n              \"src\": \"861:30:4\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 615,\n                    \"name\": \"_owner\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 588,\n                    \"src\": \"878:6:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"functionReturnParameters\": 614,\n                  \"id\": 616,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"871:13:4\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns the address of the current owner.\",\n            \"id\": 618,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"owner\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 611,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"828:2:4\"\n            },\n            \"returnParameters\": {\n              \"id\": 614,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 613,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 618,\n                  \"src\": \"852:7:4\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 612,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"852:7:4\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"851:9:4\"\n            },\n            \"scope\": 695,\n            \"src\": \"814:77:4\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 627,\n              \"nodeType\": \"Block\",\n              \"src\": \"1000:82:4\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [],\n                        \"expression\": {\n                          \"argumentTypes\": [],\n                          \"id\": 621,\n                          \"name\": \"isOwner\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 639,\n                          \"src\": \"1018:7:4\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_view$__$returns$_t_bool_$\",\n                            \"typeString\": \"function () view returns (bool)\"\n                          }\n                        },\n                        \"id\": 622,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1018:9:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572\",\n                        \"id\": 623,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1029:34:4\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe\",\n                          \"typeString\": \"literal_string \\\"Ownable: caller is not the owner\\\"\"\n                        },\n                        \"value\": \"Ownable: caller is not the owner\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe\",\n                          \"typeString\": \"literal_string \\\"Ownable: caller is not the owner\\\"\"\n                        }\n                      ],\n                      \"id\": 620,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"1010:7:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 624,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1010:54:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 625,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1010:54:4\"\n                },\n                {\n                  \"id\": 626,\n                  \"nodeType\": \"PlaceholderStatement\",\n                  \"src\": \"1074:1:4\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Throws if called by any account other than the owner.\",\n            \"id\": 628,\n            \"name\": \"onlyOwner\",\n            \"nodeType\": \"ModifierDefinition\",\n            \"parameters\": {\n              \"id\": 619,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"997:2:4\"\n            },\n            \"src\": \"979:103:4\",\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 638,\n              \"nodeType\": \"Block\",\n              \"src\": \"1211:44:4\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 636,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 633,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 710,\n                        \"src\": \"1228:3:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 634,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"1228:10:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 635,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 588,\n                      \"src\": \"1242:6:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"1228:20:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"functionReturnParameters\": 632,\n                  \"id\": 637,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1221:27:4\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns true if the caller is the current owner.\",\n            \"id\": 639,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"isOwner\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 629,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1181:2:4\"\n            },\n            \"returnParameters\": {\n              \"id\": 632,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 631,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 639,\n                  \"src\": \"1205:4:4\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bool\",\n                    \"typeString\": \"bool\"\n                  },\n                  \"typeName\": {\n                    \"id\": 630,\n                    \"name\": \"bool\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1205:4:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1204:6:4\"\n            },\n            \"scope\": 695,\n            \"src\": \"1165:90:4\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 657,\n              \"nodeType\": \"Block\",\n              \"src\": \"1645:91:4\",\n              \"statements\": [\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 645,\n                        \"name\": \"_owner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 588,\n                        \"src\": \"1681:6:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 647,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"1697:1:4\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            }\n                          ],\n                          \"id\": 646,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"1689:7:4\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": \"address\"\n                        },\n                        \"id\": 648,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1689:10:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      ],\n                      \"id\": 644,\n                      \"name\": \"OwnershipTransferred\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 594,\n                      \"src\": \"1660:20:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 649,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1660:40:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 650,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"1655:45:4\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 655,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 651,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 588,\n                      \"src\": \"1710:6:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 653,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"1727:1:4\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 652,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"1719:7:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": \"address\"\n                      },\n                      \"id\": 654,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1719:10:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"1710:19:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 656,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1710:19:4\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Leaves the contract without owner. It will not be possible to call\\n`onlyOwner` functions anymore. Can only be called by the current owner.\\n     * > Note: Renouncing ownership will leave the contract without an owner,\\nthereby removing any functionality that is only available to the owner.\",\n            \"id\": 658,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 642,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 641,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 628,\n                  \"src\": \"1635:9:4\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"1635:9:4\"\n              }\n            ],\n            \"name\": \"renounceOwnership\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 640,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1625:2:4\"\n            },\n            \"returnParameters\": {\n              \"id\": 643,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1645:0:4\"\n            },\n            \"scope\": 695,\n            \"src\": \"1599:137:4\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 669,\n              \"nodeType\": \"Block\",\n              \"src\": \"1947:45:4\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 666,\n                        \"name\": \"newOwner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 660,\n                        \"src\": \"1976:8:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 665,\n                      \"name\": \"_transferOwnership\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 694,\n                      \"src\": \"1957:18:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address)\"\n                      }\n                    },\n                    \"id\": 667,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1957:28:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 668,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1957:28:4\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Transfers ownership of the contract to a new account (`newOwner`).\\nCan only be called by the current owner.\",\n            \"id\": 670,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 663,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 662,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 628,\n                  \"src\": \"1937:9:4\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"1937:9:4\"\n              }\n            ],\n            \"name\": \"transferOwnership\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 661,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 660,\n                  \"name\": \"newOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 670,\n                  \"src\": \"1912:16:4\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 659,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1912:7:4\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1911:18:4\"\n            },\n            \"returnParameters\": {\n              \"id\": 664,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1947:0:4\"\n            },\n            \"scope\": 695,\n            \"src\": \"1885:107:4\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 693,\n              \"nodeType\": \"Block\",\n              \"src\": \"2148:170:4\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 680,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 676,\n                          \"name\": \"newOwner\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 672,\n                          \"src\": \"2166:8:4\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 678,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"2186:1:4\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 677,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"2178:7:4\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": \"address\"\n                          },\n                          \"id\": 679,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2178:10:4\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"2166:22:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373\",\n                        \"id\": 681,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2190:40:4\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe\",\n                          \"typeString\": \"literal_string \\\"Ownable: new owner is the zero address\\\"\"\n                        },\n                        \"value\": \"Ownable: new owner is the zero address\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe\",\n                          \"typeString\": \"literal_string \\\"Ownable: new owner is the zero address\\\"\"\n                        }\n                      ],\n                      \"id\": 675,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"2158:7:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 682,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2158:73:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 683,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2158:73:4\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 685,\n                        \"name\": \"_owner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 588,\n                        \"src\": \"2267:6:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 686,\n                        \"name\": \"newOwner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 672,\n                        \"src\": \"2275:8:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 684,\n                      \"name\": \"OwnershipTransferred\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 594,\n                      \"src\": \"2246:20:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 687,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2246:38:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 688,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"2241:43:4\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 691,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 689,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 588,\n                      \"src\": \"2294:6:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 690,\n                      \"name\": \"newOwner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 672,\n                      \"src\": \"2303:8:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"2294:17:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 692,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2294:17:4\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Transfers ownership of the contract to a new account (`newOwner`).\",\n            \"id\": 694,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"_transferOwnership\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 673,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 672,\n                  \"name\": \"newOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 694,\n                  \"src\": \"2121:16:4\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 671,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2121:7:4\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2120:18:4\"\n            },\n            \"returnParameters\": {\n              \"id\": 674,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2148:0:4\"\n            },\n            \"scope\": 695,\n            \"src\": \"2093:225:4\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          }\n        ],\n        \"scope\": 696,\n        \"src\": \"385:1935:4\"\n      }\n    ],\n    \"src\": \"0:2321:4\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\n    \"exportedSymbols\": {\n      \"Ownable\": [\n        695\n      ]\n    },\n    \"id\": 696,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 586,\n        \"literals\": [\n          \"solidity\",\n          \"^\",\n          \"0.5\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:4\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": \"@dev Contract module which provides a basic access control mechanism, where\\nthere is an account (an owner) that can be granted exclusive access to\\nspecific functions.\\n * This module is used through inheritance. It will make available the modifier\\n`onlyOwner`, which can be aplied to your functions to restrict their use to\\nthe owner.\",\n        \"fullyImplemented\": true,\n        \"id\": 695,\n        \"linearizedBaseContracts\": [\n          695\n        ],\n        \"name\": \"Ownable\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 588,\n            \"name\": \"_owner\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 695,\n            \"src\": \"408:22:4\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 587,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"408:7:4\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 594,\n            \"name\": \"OwnershipTransferred\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 593,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 590,\n                  \"indexed\": true,\n                  \"name\": \"previousOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 594,\n                  \"src\": \"464:29:4\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 589,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"464:7:4\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 592,\n                  \"indexed\": true,\n                  \"name\": \"newOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 594,\n                  \"src\": \"495:24:4\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 591,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"495:7:4\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"463:57:4\"\n            },\n            \"src\": \"437:84:4\"\n          },\n          {\n            \"body\": {\n              \"id\": 609,\n              \"nodeType\": \"Block\",\n              \"src\": \"647:91:4\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 600,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 597,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 588,\n                      \"src\": \"657:6:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 598,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 710,\n                        \"src\": \"666:3:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 599,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"666:10:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"657:19:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 601,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"657:19:4\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 604,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"720:1:4\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            }\n                          ],\n                          \"id\": 603,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"712:7:4\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": \"address\"\n                        },\n                        \"id\": 605,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"712:10:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 606,\n                        \"name\": \"_owner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 588,\n                        \"src\": \"724:6:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 602,\n                      \"name\": \"OwnershipTransferred\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 594,\n                      \"src\": \"691:20:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 607,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"691:40:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 608,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"686:45:4\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Initializes the contract setting the deployer as the initial owner.\",\n            \"id\": 610,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 595,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"635:2:4\"\n            },\n            \"returnParameters\": {\n              \"id\": 596,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"647:0:4\"\n            },\n            \"scope\": 695,\n            \"src\": \"623:115:4\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 617,\n              \"nodeType\": \"Block\",\n              \"src\": \"861:30:4\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 615,\n                    \"name\": \"_owner\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 588,\n                    \"src\": \"878:6:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"functionReturnParameters\": 614,\n                  \"id\": 616,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"871:13:4\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns the address of the current owner.\",\n            \"id\": 618,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"owner\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 611,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"828:2:4\"\n            },\n            \"returnParameters\": {\n              \"id\": 614,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 613,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 618,\n                  \"src\": \"852:7:4\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 612,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"852:7:4\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"851:9:4\"\n            },\n            \"scope\": 695,\n            \"src\": \"814:77:4\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 627,\n              \"nodeType\": \"Block\",\n              \"src\": \"1000:82:4\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [],\n                        \"expression\": {\n                          \"argumentTypes\": [],\n                          \"id\": 621,\n                          \"name\": \"isOwner\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 639,\n                          \"src\": \"1018:7:4\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_view$__$returns$_t_bool_$\",\n                            \"typeString\": \"function () view returns (bool)\"\n                          }\n                        },\n                        \"id\": 622,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1018:9:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572\",\n                        \"id\": 623,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1029:34:4\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe\",\n                          \"typeString\": \"literal_string \\\"Ownable: caller is not the owner\\\"\"\n                        },\n                        \"value\": \"Ownable: caller is not the owner\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe\",\n                          \"typeString\": \"literal_string \\\"Ownable: caller is not the owner\\\"\"\n                        }\n                      ],\n                      \"id\": 620,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"1010:7:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 624,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1010:54:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 625,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1010:54:4\"\n                },\n                {\n                  \"id\": 626,\n                  \"nodeType\": \"PlaceholderStatement\",\n                  \"src\": \"1074:1:4\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Throws if called by any account other than the owner.\",\n            \"id\": 628,\n            \"name\": \"onlyOwner\",\n            \"nodeType\": \"ModifierDefinition\",\n            \"parameters\": {\n              \"id\": 619,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"997:2:4\"\n            },\n            \"src\": \"979:103:4\",\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 638,\n              \"nodeType\": \"Block\",\n              \"src\": \"1211:44:4\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 636,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 633,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 710,\n                        \"src\": \"1228:3:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 634,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"1228:10:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 635,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 588,\n                      \"src\": \"1242:6:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"1228:20:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"functionReturnParameters\": 632,\n                  \"id\": 637,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1221:27:4\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns true if the caller is the current owner.\",\n            \"id\": 639,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"isOwner\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 629,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1181:2:4\"\n            },\n            \"returnParameters\": {\n              \"id\": 632,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 631,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 639,\n                  \"src\": \"1205:4:4\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bool\",\n                    \"typeString\": \"bool\"\n                  },\n                  \"typeName\": {\n                    \"id\": 630,\n                    \"name\": \"bool\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1205:4:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1204:6:4\"\n            },\n            \"scope\": 695,\n            \"src\": \"1165:90:4\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 657,\n              \"nodeType\": \"Block\",\n              \"src\": \"1645:91:4\",\n              \"statements\": [\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 645,\n                        \"name\": \"_owner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 588,\n                        \"src\": \"1681:6:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 647,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"1697:1:4\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            }\n                          ],\n                          \"id\": 646,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"1689:7:4\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": \"address\"\n                        },\n                        \"id\": 648,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1689:10:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      ],\n                      \"id\": 644,\n                      \"name\": \"OwnershipTransferred\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 594,\n                      \"src\": \"1660:20:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 649,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1660:40:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 650,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"1655:45:4\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 655,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 651,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 588,\n                      \"src\": \"1710:6:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 653,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"1727:1:4\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 652,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"1719:7:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": \"address\"\n                      },\n                      \"id\": 654,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1719:10:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"1710:19:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 656,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1710:19:4\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Leaves the contract without owner. It will not be possible to call\\n`onlyOwner` functions anymore. Can only be called by the current owner.\\n     * > Note: Renouncing ownership will leave the contract without an owner,\\nthereby removing any functionality that is only available to the owner.\",\n            \"id\": 658,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 642,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 641,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 628,\n                  \"src\": \"1635:9:4\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"1635:9:4\"\n              }\n            ],\n            \"name\": \"renounceOwnership\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 640,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1625:2:4\"\n            },\n            \"returnParameters\": {\n              \"id\": 643,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1645:0:4\"\n            },\n            \"scope\": 695,\n            \"src\": \"1599:137:4\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 669,\n              \"nodeType\": \"Block\",\n              \"src\": \"1947:45:4\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 666,\n                        \"name\": \"newOwner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 660,\n                        \"src\": \"1976:8:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 665,\n                      \"name\": \"_transferOwnership\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 694,\n                      \"src\": \"1957:18:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address)\"\n                      }\n                    },\n                    \"id\": 667,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1957:28:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 668,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1957:28:4\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Transfers ownership of the contract to a new account (`newOwner`).\\nCan only be called by the current owner.\",\n            \"id\": 670,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 663,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 662,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 628,\n                  \"src\": \"1937:9:4\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"1937:9:4\"\n              }\n            ],\n            \"name\": \"transferOwnership\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 661,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 660,\n                  \"name\": \"newOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 670,\n                  \"src\": \"1912:16:4\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 659,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1912:7:4\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1911:18:4\"\n            },\n            \"returnParameters\": {\n              \"id\": 664,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1947:0:4\"\n            },\n            \"scope\": 695,\n            \"src\": \"1885:107:4\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 693,\n              \"nodeType\": \"Block\",\n              \"src\": \"2148:170:4\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 680,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 676,\n                          \"name\": \"newOwner\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 672,\n                          \"src\": \"2166:8:4\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 678,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"2186:1:4\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 677,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"2178:7:4\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": \"address\"\n                          },\n                          \"id\": 679,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2178:10:4\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"2166:22:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373\",\n                        \"id\": 681,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2190:40:4\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe\",\n                          \"typeString\": \"literal_string \\\"Ownable: new owner is the zero address\\\"\"\n                        },\n                        \"value\": \"Ownable: new owner is the zero address\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe\",\n                          \"typeString\": \"literal_string \\\"Ownable: new owner is the zero address\\\"\"\n                        }\n                      ],\n                      \"id\": 675,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"2158:7:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 682,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2158:73:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 683,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2158:73:4\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 685,\n                        \"name\": \"_owner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 588,\n                        \"src\": \"2267:6:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 686,\n                        \"name\": \"newOwner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 672,\n                        \"src\": \"2275:8:4\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 684,\n                      \"name\": \"OwnershipTransferred\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 594,\n                      \"src\": \"2246:20:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 687,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2246:38:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 688,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"2241:43:4\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 691,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 689,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 588,\n                      \"src\": \"2294:6:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 690,\n                      \"name\": \"newOwner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 672,\n                      \"src\": \"2303:8:4\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"2294:17:4\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 692,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2294:17:4\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Transfers ownership of the contract to a new account (`newOwner`).\",\n            \"id\": 694,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"_transferOwnership\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 673,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 672,\n                  \"name\": \"newOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 694,\n                  \"src\": \"2121:16:4\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 671,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2121:7:4\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2120:18:4\"\n            },\n            \"returnParameters\": {\n              \"id\": 674,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2148:0:4\"\n            },\n            \"scope\": 695,\n            \"src\": \"2093:225:4\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          }\n        ],\n        \"scope\": 696,\n        \"src\": \"385:1935:4\"\n      }\n    ],\n    \"src\": \"0:2321:4\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.5.8+commit.23d335f2.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.0.16\",\n  \"updatedAt\": \"2019-10-10T05:34:34.824Z\",\n  \"devdoc\": {\n    \"details\": \"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. * This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be aplied to your functions to restrict their use to the owner.\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Initializes the contract setting the deployer as the initial owner.\"\n      },\n      \"isOwner()\": {\n        \"details\": \"Returns true if the caller is the current owner.\"\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    }\n  },\n  \"userdoc\": {\n    \"methods\": {}\n  }\n}"
  },
  {
    "path": "chapter-10+11/client/src/contracts/SafeMath.json",
    "content": "{\n  \"contractName\": \"SafeMath\",\n  \"abi\": [],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[],\\\"devdoc\\\":{\\\"details\\\":\\\"Wrappers over Solidity's arithmetic operations with added overflow checks. * Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when an operation overflows. * Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\\\",\\\"methods\\\":{}},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"openzeppelin-solidity/contracts/math/SafeMath.sol\\\":\\\"SafeMath\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"openzeppelin-solidity/contracts/math/SafeMath.sol\\\":{\\\"keccak256\\\":\\\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\\\",\\\"urls\\\":[\\\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x604c6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a7230582046e13f71506be81d0cb6f4f96e627809fff89874ff20814d03a785f7e5c5940a0029\",\n  \"deployedBytecode\": \"0x73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a7230582046e13f71506be81d0cb6f4f96e627809fff89874ff20814d03a785f7e5c5940a0029\",\n  \"sourceMap\": \"589:2938:3:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24\",\n  \"deployedSourceMap\": \"589:2938:3:-;;;;;;;;\",\n  \"source\": \"pragma solidity ^0.5.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, \\\"SafeMath: addition overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Solidity only automatically asserts when dividing by 0\\n        require(b > 0, \\\"SafeMath: division by zero\\\");\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        require(b != 0, \\\"SafeMath: modulo by zero\\\");\\n        return a % b;\\n    }\\n}\\n\",\n  \"sourcePath\": \"openzeppelin-solidity/contracts/math/SafeMath.sol\",\n  \"ast\": {\n    \"absolutePath\": \"openzeppelin-solidity/contracts/math/SafeMath.sol\",\n    \"exportedSymbols\": {\n      \"SafeMath\": [\n        584\n      ]\n    },\n    \"id\": 585,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 453,\n        \"literals\": [\n          \"solidity\",\n          \"^\",\n          \"0.5\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:3\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"library\",\n        \"documentation\": \"@dev Wrappers over Solidity's arithmetic operations with added overflow\\nchecks.\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\nin bugs, because programmers usually assume that an overflow raises an\\nerror, which is the standard behavior in high level programming languages.\\n`SafeMath` restores this intuition by reverting the transaction when an\\noperation overflows.\\n * Using this library instead of the unchecked operations eliminates an entire\\nclass of bugs, so it's recommended to use it always.\",\n        \"fullyImplemented\": true,\n        \"id\": 584,\n        \"linearizedBaseContracts\": [\n          584\n        ],\n        \"name\": \"SafeMath\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"body\": {\n              \"id\": 477,\n              \"nodeType\": \"Block\",\n              \"src\": \"901:109:3\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    463\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 463,\n                      \"name\": \"c\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 477,\n                      \"src\": \"911:9:3\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 462,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"911:7:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 467,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 466,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 464,\n                      \"name\": \"a\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 455,\n                      \"src\": \"923:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"+\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 465,\n                      \"name\": \"b\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 457,\n                      \"src\": \"927:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"923:5:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"911:17:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 471,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 469,\n                          \"name\": \"c\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 463,\n                          \"src\": \"946:1:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \">=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 470,\n                          \"name\": \"a\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 455,\n                          \"src\": \"951:1:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"946:6:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"536166654d6174683a206164646974696f6e206f766572666c6f77\",\n                        \"id\": 472,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"954:29:3\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a\",\n                          \"typeString\": \"literal_string \\\"SafeMath: addition overflow\\\"\"\n                        },\n                        \"value\": \"SafeMath: addition overflow\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a\",\n                          \"typeString\": \"literal_string \\\"SafeMath: addition overflow\\\"\"\n                        }\n                      ],\n                      \"id\": 468,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"938:7:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 473,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"938:46:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 474,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"938:46:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 475,\n                    \"name\": \"c\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 463,\n                    \"src\": \"1002:1:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 461,\n                  \"id\": 476,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"995:8:3\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns the addition of two unsigned integers, reverting on\\noverflow.\\n     * Counterpart to Solidity's `+` operator.\\n     * Requirements:\\n- Addition cannot overflow.\",\n            \"id\": 478,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"add\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 458,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 455,\n                  \"name\": \"a\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 478,\n                  \"src\": \"847:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 454,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"847:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 457,\n                  \"name\": \"b\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 478,\n                  \"src\": \"858:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 456,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"858:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"846:22:3\"\n            },\n            \"returnParameters\": {\n              \"id\": 461,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 460,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 478,\n                  \"src\": \"892:7:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 459,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"892:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"891:9:3\"\n            },\n            \"scope\": 584,\n            \"src\": \"834:176:3\",\n            \"stateMutability\": \"pure\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 502,\n              \"nodeType\": \"Block\",\n              \"src\": \"1341:112:3\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 490,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 488,\n                          \"name\": \"b\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 482,\n                          \"src\": \"1359:1:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"<=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 489,\n                          \"name\": \"a\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 480,\n                          \"src\": \"1364:1:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"1359:6:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"536166654d6174683a207375627472616374696f6e206f766572666c6f77\",\n                        \"id\": 491,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1367:32:3\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862\",\n                          \"typeString\": \"literal_string \\\"SafeMath: subtraction overflow\\\"\"\n                        },\n                        \"value\": \"SafeMath: subtraction overflow\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862\",\n                          \"typeString\": \"literal_string \\\"SafeMath: subtraction overflow\\\"\"\n                        }\n                      ],\n                      \"id\": 487,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"1351:7:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 492,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1351:49:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 493,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1351:49:3\"\n                },\n                {\n                  \"assignments\": [\n                    495\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 495,\n                      \"name\": \"c\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 502,\n                      \"src\": \"1410:9:3\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 494,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1410:7:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 499,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 498,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 496,\n                      \"name\": \"a\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 480,\n                      \"src\": \"1422:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"-\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 497,\n                      \"name\": \"b\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 482,\n                      \"src\": \"1426:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1422:5:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1410:17:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 500,\n                    \"name\": \"c\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 495,\n                    \"src\": \"1445:1:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 486,\n                  \"id\": 501,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1438:8:3\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns the subtraction of two unsigned integers, reverting on\\noverflow (when the result is negative).\\n     * Counterpart to Solidity's `-` operator.\\n     * Requirements:\\n- Subtraction cannot overflow.\",\n            \"id\": 503,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"sub\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 483,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 480,\n                  \"name\": \"a\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 503,\n                  \"src\": \"1287:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 479,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1287:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 482,\n                  \"name\": \"b\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 503,\n                  \"src\": \"1298:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 481,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1298:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1286:22:3\"\n            },\n            \"returnParameters\": {\n              \"id\": 486,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 485,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 503,\n                  \"src\": \"1332:7:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 484,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1332:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1331:9:3\"\n            },\n            \"scope\": 584,\n            \"src\": \"1274:179:3\",\n            \"stateMutability\": \"pure\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 536,\n              \"nodeType\": \"Block\",\n              \"src\": \"1760:391:3\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 514,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 512,\n                      \"name\": \"a\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 505,\n                      \"src\": \"1991:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 513,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1996:1:3\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"src\": \"1991:6:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 518,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"1987:45:3\",\n                  \"trueBody\": {\n                    \"id\": 517,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"1999:33:3\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 515,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2020:1:3\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        },\n                        \"functionReturnParameters\": 511,\n                        \"id\": 516,\n                        \"nodeType\": \"Return\",\n                        \"src\": \"2013:8:3\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"assignments\": [\n                    520\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 520,\n                      \"name\": \"c\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 536,\n                      \"src\": \"2042:9:3\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 519,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2042:7:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 524,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 523,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 521,\n                      \"name\": \"a\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 505,\n                      \"src\": \"2054:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"*\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 522,\n                      \"name\": \"b\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 507,\n                      \"src\": \"2058:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"2054:5:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2042:17:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 530,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 528,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 526,\n                            \"name\": \"c\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 520,\n                            \"src\": \"2077:1:3\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"/\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 527,\n                            \"name\": \"a\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 505,\n                            \"src\": \"2081:1:3\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"2077:5:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"==\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 529,\n                          \"name\": \"b\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 507,\n                          \"src\": \"2086:1:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"2077:10:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77\",\n                        \"id\": 531,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2089:35:3\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3\",\n                          \"typeString\": \"literal_string \\\"SafeMath: multiplication overflow\\\"\"\n                        },\n                        \"value\": \"SafeMath: multiplication overflow\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3\",\n                          \"typeString\": \"literal_string \\\"SafeMath: multiplication overflow\\\"\"\n                        }\n                      ],\n                      \"id\": 525,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"2069:7:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 532,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2069:56:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 533,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2069:56:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 534,\n                    \"name\": \"c\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 520,\n                    \"src\": \"2143:1:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 511,\n                  \"id\": 535,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2136:8:3\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns the multiplication of two unsigned integers, reverting on\\noverflow.\\n     * Counterpart to Solidity's `*` operator.\\n     * Requirements:\\n- Multiplication cannot overflow.\",\n            \"id\": 537,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"mul\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 508,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 505,\n                  \"name\": \"a\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 537,\n                  \"src\": \"1706:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 504,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1706:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 507,\n                  \"name\": \"b\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 537,\n                  \"src\": \"1717:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 506,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1717:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1705:22:3\"\n            },\n            \"returnParameters\": {\n              \"id\": 511,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 510,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 537,\n                  \"src\": \"1751:7:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 509,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1751:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1750:9:3\"\n            },\n            \"scope\": 584,\n            \"src\": \"1693:458:3\",\n            \"stateMutability\": \"pure\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 561,\n              \"nodeType\": \"Block\",\n              \"src\": \"2673:259:3\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 549,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 547,\n                          \"name\": \"b\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 541,\n                          \"src\": \"2757:1:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \">\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 548,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2761:1:3\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        },\n                        \"src\": \"2757:5:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"536166654d6174683a206469766973696f6e206279207a65726f\",\n                        \"id\": 550,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2764:28:3\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f\",\n                          \"typeString\": \"literal_string \\\"SafeMath: division by zero\\\"\"\n                        },\n                        \"value\": \"SafeMath: division by zero\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f\",\n                          \"typeString\": \"literal_string \\\"SafeMath: division by zero\\\"\"\n                        }\n                      ],\n                      \"id\": 546,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"2749:7:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 551,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2749:44:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 552,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2749:44:3\"\n                },\n                {\n                  \"assignments\": [\n                    554\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 554,\n                      \"name\": \"c\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 561,\n                      \"src\": \"2803:9:3\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 553,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2803:7:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 558,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 557,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 555,\n                      \"name\": \"a\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 539,\n                      \"src\": \"2815:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"/\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 556,\n                      \"name\": \"b\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 541,\n                      \"src\": \"2819:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"2815:5:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2803:17:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 559,\n                    \"name\": \"c\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 554,\n                    \"src\": \"2924:1:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 545,\n                  \"id\": 560,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2917:8:3\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns the integer division of two unsigned integers. Reverts on\\ndivision by zero. The result is rounded towards zero.\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n`revert` opcode (which leaves remaining gas untouched) while Solidity\\nuses an invalid opcode to revert (consuming all remaining gas).\\n     * Requirements:\\n- The divisor cannot be zero.\",\n            \"id\": 562,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"div\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 542,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 539,\n                  \"name\": \"a\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 562,\n                  \"src\": \"2619:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 538,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2619:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 541,\n                  \"name\": \"b\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 562,\n                  \"src\": \"2630:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 540,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2630:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2618:22:3\"\n            },\n            \"returnParameters\": {\n              \"id\": 545,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 544,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 562,\n                  \"src\": \"2664:7:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 543,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2664:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2663:9:3\"\n            },\n            \"scope\": 584,\n            \"src\": \"2606:326:3\",\n            \"stateMutability\": \"pure\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 582,\n              \"nodeType\": \"Block\",\n              \"src\": \"3443:82:3\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 574,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 572,\n                          \"name\": \"b\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 566,\n                          \"src\": \"3461:1:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 573,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"3466:1:3\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        },\n                        \"src\": \"3461:6:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"536166654d6174683a206d6f64756c6f206279207a65726f\",\n                        \"id\": 575,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3469:26:3\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832\",\n                          \"typeString\": \"literal_string \\\"SafeMath: modulo by zero\\\"\"\n                        },\n                        \"value\": \"SafeMath: modulo by zero\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832\",\n                          \"typeString\": \"literal_string \\\"SafeMath: modulo by zero\\\"\"\n                        }\n                      ],\n                      \"id\": 571,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"3453:7:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 576,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3453:43:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 577,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3453:43:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 580,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 578,\n                      \"name\": \"a\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 564,\n                      \"src\": \"3513:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"%\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 579,\n                      \"name\": \"b\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 566,\n                      \"src\": \"3517:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"3513:5:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 570,\n                  \"id\": 581,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"3506:12:3\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\nReverts when dividing by zero.\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\nopcode (which leaves remaining gas untouched) while Solidity uses an\\ninvalid opcode to revert (consuming all remaining gas).\\n     * Requirements:\\n- The divisor cannot be zero.\",\n            \"id\": 583,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"mod\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 567,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 564,\n                  \"name\": \"a\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 583,\n                  \"src\": \"3389:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 563,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"3389:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 566,\n                  \"name\": \"b\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 583,\n                  \"src\": \"3400:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 565,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"3400:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"3388:22:3\"\n            },\n            \"returnParameters\": {\n              \"id\": 570,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 569,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 583,\n                  \"src\": \"3434:7:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 568,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"3434:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"3433:9:3\"\n            },\n            \"scope\": 584,\n            \"src\": \"3376:149:3\",\n            \"stateMutability\": \"pure\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          }\n        ],\n        \"scope\": 585,\n        \"src\": \"589:2938:3\"\n      }\n    ],\n    \"src\": \"0:3528:3\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"openzeppelin-solidity/contracts/math/SafeMath.sol\",\n    \"exportedSymbols\": {\n      \"SafeMath\": [\n        584\n      ]\n    },\n    \"id\": 585,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 453,\n        \"literals\": [\n          \"solidity\",\n          \"^\",\n          \"0.5\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:3\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"library\",\n        \"documentation\": \"@dev Wrappers over Solidity's arithmetic operations with added overflow\\nchecks.\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\nin bugs, because programmers usually assume that an overflow raises an\\nerror, which is the standard behavior in high level programming languages.\\n`SafeMath` restores this intuition by reverting the transaction when an\\noperation overflows.\\n * Using this library instead of the unchecked operations eliminates an entire\\nclass of bugs, so it's recommended to use it always.\",\n        \"fullyImplemented\": true,\n        \"id\": 584,\n        \"linearizedBaseContracts\": [\n          584\n        ],\n        \"name\": \"SafeMath\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"body\": {\n              \"id\": 477,\n              \"nodeType\": \"Block\",\n              \"src\": \"901:109:3\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    463\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 463,\n                      \"name\": \"c\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 477,\n                      \"src\": \"911:9:3\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 462,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"911:7:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 467,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 466,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 464,\n                      \"name\": \"a\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 455,\n                      \"src\": \"923:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"+\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 465,\n                      \"name\": \"b\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 457,\n                      \"src\": \"927:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"923:5:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"911:17:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 471,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 469,\n                          \"name\": \"c\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 463,\n                          \"src\": \"946:1:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \">=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 470,\n                          \"name\": \"a\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 455,\n                          \"src\": \"951:1:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"946:6:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"536166654d6174683a206164646974696f6e206f766572666c6f77\",\n                        \"id\": 472,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"954:29:3\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a\",\n                          \"typeString\": \"literal_string \\\"SafeMath: addition overflow\\\"\"\n                        },\n                        \"value\": \"SafeMath: addition overflow\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a\",\n                          \"typeString\": \"literal_string \\\"SafeMath: addition overflow\\\"\"\n                        }\n                      ],\n                      \"id\": 468,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"938:7:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 473,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"938:46:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 474,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"938:46:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 475,\n                    \"name\": \"c\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 463,\n                    \"src\": \"1002:1:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 461,\n                  \"id\": 476,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"995:8:3\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns the addition of two unsigned integers, reverting on\\noverflow.\\n     * Counterpart to Solidity's `+` operator.\\n     * Requirements:\\n- Addition cannot overflow.\",\n            \"id\": 478,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"add\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 458,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 455,\n                  \"name\": \"a\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 478,\n                  \"src\": \"847:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 454,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"847:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 457,\n                  \"name\": \"b\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 478,\n                  \"src\": \"858:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 456,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"858:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"846:22:3\"\n            },\n            \"returnParameters\": {\n              \"id\": 461,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 460,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 478,\n                  \"src\": \"892:7:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 459,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"892:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"891:9:3\"\n            },\n            \"scope\": 584,\n            \"src\": \"834:176:3\",\n            \"stateMutability\": \"pure\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 502,\n              \"nodeType\": \"Block\",\n              \"src\": \"1341:112:3\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 490,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 488,\n                          \"name\": \"b\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 482,\n                          \"src\": \"1359:1:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"<=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 489,\n                          \"name\": \"a\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 480,\n                          \"src\": \"1364:1:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"1359:6:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"536166654d6174683a207375627472616374696f6e206f766572666c6f77\",\n                        \"id\": 491,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1367:32:3\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862\",\n                          \"typeString\": \"literal_string \\\"SafeMath: subtraction overflow\\\"\"\n                        },\n                        \"value\": \"SafeMath: subtraction overflow\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862\",\n                          \"typeString\": \"literal_string \\\"SafeMath: subtraction overflow\\\"\"\n                        }\n                      ],\n                      \"id\": 487,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"1351:7:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 492,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1351:49:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 493,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1351:49:3\"\n                },\n                {\n                  \"assignments\": [\n                    495\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 495,\n                      \"name\": \"c\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 502,\n                      \"src\": \"1410:9:3\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 494,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1410:7:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 499,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 498,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 496,\n                      \"name\": \"a\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 480,\n                      \"src\": \"1422:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"-\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 497,\n                      \"name\": \"b\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 482,\n                      \"src\": \"1426:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1422:5:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1410:17:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 500,\n                    \"name\": \"c\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 495,\n                    \"src\": \"1445:1:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 486,\n                  \"id\": 501,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1438:8:3\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns the subtraction of two unsigned integers, reverting on\\noverflow (when the result is negative).\\n     * Counterpart to Solidity's `-` operator.\\n     * Requirements:\\n- Subtraction cannot overflow.\",\n            \"id\": 503,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"sub\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 483,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 480,\n                  \"name\": \"a\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 503,\n                  \"src\": \"1287:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 479,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1287:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 482,\n                  \"name\": \"b\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 503,\n                  \"src\": \"1298:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 481,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1298:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1286:22:3\"\n            },\n            \"returnParameters\": {\n              \"id\": 486,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 485,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 503,\n                  \"src\": \"1332:7:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 484,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1332:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1331:9:3\"\n            },\n            \"scope\": 584,\n            \"src\": \"1274:179:3\",\n            \"stateMutability\": \"pure\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 536,\n              \"nodeType\": \"Block\",\n              \"src\": \"1760:391:3\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 514,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 512,\n                      \"name\": \"a\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 505,\n                      \"src\": \"1991:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 513,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1996:1:3\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"src\": \"1991:6:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 518,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"1987:45:3\",\n                  \"trueBody\": {\n                    \"id\": 517,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"1999:33:3\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 515,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2020:1:3\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        },\n                        \"functionReturnParameters\": 511,\n                        \"id\": 516,\n                        \"nodeType\": \"Return\",\n                        \"src\": \"2013:8:3\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"assignments\": [\n                    520\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 520,\n                      \"name\": \"c\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 536,\n                      \"src\": \"2042:9:3\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 519,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2042:7:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 524,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 523,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 521,\n                      \"name\": \"a\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 505,\n                      \"src\": \"2054:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"*\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 522,\n                      \"name\": \"b\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 507,\n                      \"src\": \"2058:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"2054:5:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2042:17:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 530,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 528,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 526,\n                            \"name\": \"c\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 520,\n                            \"src\": \"2077:1:3\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"/\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 527,\n                            \"name\": \"a\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 505,\n                            \"src\": \"2081:1:3\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"2077:5:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"==\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 529,\n                          \"name\": \"b\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 507,\n                          \"src\": \"2086:1:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"2077:10:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77\",\n                        \"id\": 531,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2089:35:3\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3\",\n                          \"typeString\": \"literal_string \\\"SafeMath: multiplication overflow\\\"\"\n                        },\n                        \"value\": \"SafeMath: multiplication overflow\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3\",\n                          \"typeString\": \"literal_string \\\"SafeMath: multiplication overflow\\\"\"\n                        }\n                      ],\n                      \"id\": 525,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"2069:7:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 532,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2069:56:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 533,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2069:56:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 534,\n                    \"name\": \"c\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 520,\n                    \"src\": \"2143:1:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 511,\n                  \"id\": 535,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2136:8:3\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns the multiplication of two unsigned integers, reverting on\\noverflow.\\n     * Counterpart to Solidity's `*` operator.\\n     * Requirements:\\n- Multiplication cannot overflow.\",\n            \"id\": 537,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"mul\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 508,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 505,\n                  \"name\": \"a\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 537,\n                  \"src\": \"1706:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 504,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1706:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 507,\n                  \"name\": \"b\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 537,\n                  \"src\": \"1717:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 506,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1717:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1705:22:3\"\n            },\n            \"returnParameters\": {\n              \"id\": 511,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 510,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 537,\n                  \"src\": \"1751:7:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 509,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1751:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1750:9:3\"\n            },\n            \"scope\": 584,\n            \"src\": \"1693:458:3\",\n            \"stateMutability\": \"pure\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 561,\n              \"nodeType\": \"Block\",\n              \"src\": \"2673:259:3\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 549,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 547,\n                          \"name\": \"b\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 541,\n                          \"src\": \"2757:1:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \">\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 548,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2761:1:3\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        },\n                        \"src\": \"2757:5:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"536166654d6174683a206469766973696f6e206279207a65726f\",\n                        \"id\": 550,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2764:28:3\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f\",\n                          \"typeString\": \"literal_string \\\"SafeMath: division by zero\\\"\"\n                        },\n                        \"value\": \"SafeMath: division by zero\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f\",\n                          \"typeString\": \"literal_string \\\"SafeMath: division by zero\\\"\"\n                        }\n                      ],\n                      \"id\": 546,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"2749:7:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 551,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2749:44:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 552,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2749:44:3\"\n                },\n                {\n                  \"assignments\": [\n                    554\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 554,\n                      \"name\": \"c\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 561,\n                      \"src\": \"2803:9:3\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 553,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2803:7:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 558,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 557,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 555,\n                      \"name\": \"a\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 539,\n                      \"src\": \"2815:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"/\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 556,\n                      \"name\": \"b\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 541,\n                      \"src\": \"2819:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"2815:5:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2803:17:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 559,\n                    \"name\": \"c\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 554,\n                    \"src\": \"2924:1:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 545,\n                  \"id\": 560,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2917:8:3\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns the integer division of two unsigned integers. Reverts on\\ndivision by zero. The result is rounded towards zero.\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n`revert` opcode (which leaves remaining gas untouched) while Solidity\\nuses an invalid opcode to revert (consuming all remaining gas).\\n     * Requirements:\\n- The divisor cannot be zero.\",\n            \"id\": 562,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"div\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 542,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 539,\n                  \"name\": \"a\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 562,\n                  \"src\": \"2619:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 538,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2619:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 541,\n                  \"name\": \"b\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 562,\n                  \"src\": \"2630:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 540,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2630:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2618:22:3\"\n            },\n            \"returnParameters\": {\n              \"id\": 545,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 544,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 562,\n                  \"src\": \"2664:7:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 543,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2664:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2663:9:3\"\n            },\n            \"scope\": 584,\n            \"src\": \"2606:326:3\",\n            \"stateMutability\": \"pure\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 582,\n              \"nodeType\": \"Block\",\n              \"src\": \"3443:82:3\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 574,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 572,\n                          \"name\": \"b\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 566,\n                          \"src\": \"3461:1:3\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 573,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"3466:1:3\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        },\n                        \"src\": \"3461:6:3\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"536166654d6174683a206d6f64756c6f206279207a65726f\",\n                        \"id\": 575,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3469:26:3\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832\",\n                          \"typeString\": \"literal_string \\\"SafeMath: modulo by zero\\\"\"\n                        },\n                        \"value\": \"SafeMath: modulo by zero\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832\",\n                          \"typeString\": \"literal_string \\\"SafeMath: modulo by zero\\\"\"\n                        }\n                      ],\n                      \"id\": 571,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        713,\n                        714\n                      ],\n                      \"referencedDeclaration\": 714,\n                      \"src\": \"3453:7:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 576,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3453:43:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 577,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3453:43:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 580,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 578,\n                      \"name\": \"a\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 564,\n                      \"src\": \"3513:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"%\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 579,\n                      \"name\": \"b\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 566,\n                      \"src\": \"3517:1:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"3513:5:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 570,\n                  \"id\": 581,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"3506:12:3\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\nReverts when dividing by zero.\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\nopcode (which leaves remaining gas untouched) while Solidity uses an\\ninvalid opcode to revert (consuming all remaining gas).\\n     * Requirements:\\n- The divisor cannot be zero.\",\n            \"id\": 583,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"mod\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 567,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 564,\n                  \"name\": \"a\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 583,\n                  \"src\": \"3389:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 563,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"3389:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 566,\n                  \"name\": \"b\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 583,\n                  \"src\": \"3400:9:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 565,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"3400:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"3388:22:3\"\n            },\n            \"returnParameters\": {\n              \"id\": 570,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 569,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 583,\n                  \"src\": \"3434:7:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 568,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"3434:7:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"3433:9:3\"\n            },\n            \"scope\": 584,\n            \"src\": \"3376:149:3\",\n            \"stateMutability\": \"pure\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          }\n        ],\n        \"scope\": 585,\n        \"src\": \"589:2938:3\"\n      }\n    ],\n    \"src\": \"0:3528:3\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.5.8+commit.23d335f2.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.0.16\",\n  \"updatedAt\": \"2019-10-10T05:34:34.822Z\",\n  \"devdoc\": {\n    \"details\": \"Wrappers over Solidity's arithmetic operations with added overflow checks. * Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when an operation overflows. * Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\n    \"methods\": {}\n  },\n  \"userdoc\": {\n    \"methods\": {}\n  }\n}"
  },
  {
    "path": "chapter-10+11/client/src/index.css",
    "content": "body {\n  margin: 0;\n  padding: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\",\n    \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n    sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n  font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n    monospace;\n}\n"
  },
  {
    "path": "chapter-10+11/client/src/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom'\nimport App from './App';\n\nReactDOM.render((\n  // <Provider store={store}>\n    <BrowserRouter>\n      <App />\n    </BrowserRouter>\n  // </Provider>\n), document.getElementById('root'))\n"
  },
  {
    "path": "chapter-10+11/client/src/serviceWorker.js",
    "content": "// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.1/8 is considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\nexport function register(config) {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit http://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl)\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister();\n    });\n  }\n}\n"
  },
  {
    "path": "chapter-10+11/client/src/utils/getWeb3.js",
    "content": "import Web3 from \"web3\";\n\nconst getWeb3 = () =>\n  new Promise((resolve, reject) => {\n    // Wait for loading completion to avoid race conditions with web3 injection timing.\n    window.addEventListener(\"load\", async () => {\n      // Modern dapp browsers...\n      if (window.ethereum) {\n        const web3 = new Web3(window.ethereum);\n        try {\n          // Request account access if needed\n          await window.ethereum.enable();\n          // Acccounts now exposed\n          resolve(web3);\n        } catch (error) {\n          reject(error);\n        }\n      }\n      // Legacy dapp browsers...\n      else if (window.web3) {\n        // Use Mist/MetaMask's provider.\n        const web3 = window.web3;\n        console.log(\"Injected web3 detected.\");\n        resolve(web3);\n      }\n      // Fallback to localhost; use dev console port by default...\n      else {\n        const provider = new Web3.providers.HttpProvider(\n          \"http://127.0.0.1:8545\"\n        );\n        const web3 = new Web3(provider);\n        console.log(\"No web3 instance injected, using Local web3.\");\n        resolve(web3);\n      }\n    });\n  });\n\nexport default getWeb3;\n"
  },
  {
    "path": "chapter-10+11/contracts/Fundraiser.sol",
    "content": "pragma solidity >0.4.23 <0.7.0;\n\nimport \"openzeppelin-solidity/contracts/ownership/Ownable.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\n\ncontract Fundraiser is Ownable {\n    using SafeMath for uint256;\n\n    struct Donation {\n        uint256 value;\n        uint256 date;\n    }\n    mapping(address => Donation[]) private _donations;\n\n    event DonationReceived(address indexed donor, uint256 value);\n    event Withdraw(uint256 amount);\n\n    string public name;\n    string public url;\n    string public imageURL;\n    string public description;\n\n    address payable public beneficiary;\n\n    uint256 public totalDonations;\n    uint256 public donationsCount;\n\n    constructor(\n        string memory _name,\n        string memory _url,\n        string memory _imageURL,\n        string memory _description,\n        address payable _beneficiary,\n        address _custodian\n    )\n        public\n    {\n        name = _name;\n        url = _url;\n        imageURL = _imageURL;\n        description = _description;\n        beneficiary = _beneficiary;\n        _transferOwnership(_custodian);\n    }\n\n    function setBeneficiary(address payable _beneficiary) public onlyOwner {\n        beneficiary = _beneficiary;\n    }\n\n    function myDonationsCount() public view returns(uint256) {\n        return _donations[msg.sender].length;\n    }\n\n    function donate() public payable {\n        Donation memory donation = Donation({\n            value: msg.value,\n            date: block.timestamp\n        });\n        _donations[msg.sender].push(donation);\n        totalDonations = totalDonations.add(msg.value);\n        donationsCount++;\n\n        emit DonationReceived(msg.sender, msg.value);\n    }\n\n    function myDonations() public view returns(\n        uint256[] memory values,\n        uint256[] memory dates\n    )\n    {\n        uint256 count = myDonationsCount();\n        values = new uint256[](count);\n        dates = new uint256[](count);\n\n        for (uint256 i = 0; i < count; i++) {\n            Donation storage donation = _donations[msg.sender][i];\n            values[i] = donation.value;\n            dates[i] = donation.date;\n        }\n\n        return (values, dates);\n    }\n\n    function withdraw() public onlyOwner {\n        uint256 balance = address(this).balance;\n        beneficiary.transfer(balance);\n        emit Withdraw(balance);\n    }\n\n    function () external payable {\n        totalDonations = totalDonations.add(msg.value);\n        donationsCount++;\n    }\n}\n"
  },
  {
    "path": "chapter-10+11/contracts/FundraiserFactory.sol",
    "content": "pragma solidity >0.4.23 <0.7.0;\n\nimport \"./Fundraiser.sol\";\n\ncontract FundraiserFactory {\n   uint256 constant maxLimit = 20;\n   Fundraiser[] private _fundraisers;\n\n   event FundraiserCreated(Fundraiser indexed fundraiser, address indexed owner);\n\n    function createFundraiser(\n        string memory name,\n        string memory url,\n        string memory imageURL,\n        string memory description,\n        address payable beneficiary\n    )\n        public\n    {\n        Fundraiser fundraiser = new Fundraiser(\n            name,\n            url,\n            imageURL,\n            description,\n            beneficiary,\n            msg.sender\n        );\n        _fundraisers.push(fundraiser);\n        emit FundraiserCreated(fundraiser, msg.sender);\n    }\n\n    function fundraisersCount() public view returns(uint256) {\n        return _fundraisers.length;\n    }\n\n    function fundraisers(uint256 limit, uint256 offset)\n        public\n        view\n        returns(Fundraiser[] memory coll)\n    {\n        require(offset <= fundraisersCount(), \"offset out of bounds\");\n\n        uint256 size = fundraisersCount() - offset;\n        size = size < limit ? size : limit;\n        size = size < maxLimit ? size : maxLimit;\n        coll = new Fundraiser[](size);\n\n        for(uint256 i = 0; i < size; i++) {\n            coll[i] = _fundraisers[offset + i];\n        }\n\n        return coll;\n    }\n}\n"
  },
  {
    "path": "chapter-10+11/contracts/Migrations.sol",
    "content": "pragma solidity ^0.5.0;\n\ncontract Migrations {\n  address public owner;\n  uint public last_completed_migration;\n\n  modifier restricted() {\n    if (msg.sender == owner) _;\n  }\n\n  constructor() public {\n    owner = msg.sender;\n  }\n\n  function setCompleted(uint completed) public restricted {\n    last_completed_migration = completed;\n  }\n\n  function upgrade(address new_address) public restricted {\n    Migrations upgraded = Migrations(new_address);\n    upgraded.setCompleted(last_completed_migration);\n  }\n}\n"
  },
  {
    "path": "chapter-10+11/migrations/1_initial_migration.js",
    "content": "var Migrations = artifacts.require(\"./Migrations.sol\");\n\nmodule.exports = function(deployer) {\n  deployer.deploy(Migrations);\n};\n"
  },
  {
    "path": "chapter-10+11/migrations/2_deploy_fundraiser_factory.js",
    "content": "const FundraiserFactoryContract = artifacts.require(\"FundraiserFactory\");\n\nmodule.exports = function(deployer) {\n  deployer.deploy(FundraiserFactoryContract);\n}\n"
  },
  {
    "path": "chapter-10+11/test/TestSimpleStorage.sol",
    "content": "pragma solidity ^0.5.0;\n\nimport \"truffle/Assert.sol\";\nimport \"truffle/DeployedAddresses.sol\";\nimport \"../contracts/SimpleStorage.sol\";\n\ncontract TestSimpleStorage {\n\n  function testItStoresAValue() public {\n    SimpleStorage simpleStorage = SimpleStorage(DeployedAddresses.SimpleStorage());\n\n    simpleStorage.set(89);\n\n    uint expected = 89;\n\n    Assert.equal(simpleStorage.get(), expected, \"It should store the value 89.\");\n  }\n\n}\n"
  },
  {
    "path": "chapter-10+11/test/simplestorage.js",
    "content": "const SimpleStorage = artifacts.require(\"./SimpleStorage.sol\");\n\ncontract(\"SimpleStorage\", accounts => {\n  it(\"...should store the value 89.\", async () => {\n    const simpleStorageInstance = await SimpleStorage.deployed();\n\n    // Set value of 89\n    await simpleStorageInstance.set(89, { from: accounts[0] });\n\n    // Get stored value\n    const storedData = await simpleStorageInstance.get.call();\n\n    assert.equal(storedData, 89, \"The value 89 was not stored.\");\n  });\n});\n"
  },
  {
    "path": "chapter-10+11/truffle-config.js",
    "content": "const path = require(\"path\");\n\nmodule.exports = {\n  // See <http://truffleframework.com/docs/advanced/configuration>\n  // to customize your Truffle configuration!\n  contracts_build_directory: path.join(__dirname, \"client/src/contracts\"),\n  networks: {\n    develop: {\n      port: 8545\n    }\n  }\n};\n"
  },
  {
    "path": "chapter-4/greeter/contracts/Greeter.sol",
    "content": "pragma solidity >= 0.4.0 < 0.7.0;\n\nimport \"openzeppelin-solidity/contracts/access/Ownable.sol\";\n\ncontract Greeter is Ownable {\n  string private _greeting = \"Hello, World!\";\n\n  function greet() external view returns(string memory) {\n    return _greeting;\n  }\n\n  function setGreeting(string calldata greeting) external onlyOwner {\n    _greeting = greeting;\n  }\n}\n"
  },
  {
    "path": "chapter-4/greeter/contracts/Migrations.sol",
    "content": "pragma solidity >=0.4.21 <0.6.0;\n\ncontract Migrations {\n  address public owner;\n  uint public last_completed_migration;\n\n  constructor() public {\n    owner = msg.sender;\n  }\n\n  modifier restricted() {\n    if (msg.sender == owner) _;\n  }\n\n  function setCompleted(uint completed) public restricted {\n    last_completed_migration = completed;\n  }\n\n  function upgrade(address new_address) public restricted {\n    Migrations upgraded = Migrations(new_address);\n    upgraded.setCompleted(last_completed_migration);\n  }\n}\n"
  },
  {
    "path": "chapter-4/greeter/migrations/1_initial_migration.js",
    "content": "const Migrations = artifacts.require(\"Migrations\");\n\nmodule.exports = function(deployer) {\n  deployer.deploy(Migrations);\n};\n"
  },
  {
    "path": "chapter-4/greeter/migrations/2_deploy_greeter.js",
    "content": "const GreeterContract = artifacts.require(\"Greeter\");\n\nmodule.exports = function(deployer) {\n  deployer.deploy(GreeterContract);\n}\n"
  },
  {
    "path": "chapter-4/greeter/test/greeter_test.js",
    "content": "const GreeterContract = artifacts.require(\"Greeter\");\n\ncontract(\"Greeter\", (accounts) => {\n  describe(\"deployment\", () => {\n    it(\"has been deployed successfully\", async () => {\n      const greeter = await GreeterContract.deployed();\n      assert(greeter, \"contract failed to deploy\");\n    });\n  });\n\n  describe(\"greet()\", () => {\n    it(\"returns 'Hello, World!'\", async () => {\n      const greeter = await GreeterContract.deployed();\n      const expected = \"Hello, World!\";\n      const actual = await greeter.greet();\n\n      assert.equal(actual, expected, \"greeted with 'Hello, World!'\");\n    })\n  });\n\n  describe(\"owner()\", () => {\n    it(\"returns the address of the owner\", async () => {\n      const greeter = await GreeterContract.deployed();\n      const owner = await greeter.owner();\n      \n      assert(owner, \"the current owner\");\n    });\n\n    it(\"matches the address that originally deployed the contract\", async () => {\n      const greeter = await GreeterContract.deployed();\n      const owner = await greeter.owner();\n      const expected = accounts[0];\n      \n      assert.equal(owner, expected, \"matches address used to deploy contract\");\n    });\n  });\n});\n\ncontract(\"Greeter: update greeting\", (accounts) => {\n  describe(\"setGreeting(string)\", () => {\n    describe(\"when message is sent by the owner\", () => {\n      it(\"sets greeting to passed in string\", async () => {\n        const greeter = await GreeterContract.deployed()\n        const expected = \"The owner changed the message\";\n\n        await greeter.setGreeting(expected);\n        const actual = await greeter.greet();\n\n        assert.equal(actual, expected, \"greeting was not updated\");\n      });\n    });\n\n    describe(\"when message is sent by another account\", () => {\n      it(\"does not set the greeting\", async () => {\n        const greeter = await GreeterContract.deployed()\n        const expected = await greeter.greet();\n\n        try {\n          await greeter.setGreeting(\"Not the owner\", { from: accounts[1] });\n        } catch(err) {\n          const errorMessage = \"Ownable: caller is not the owner\"\n          assert.equal(err.reason, errorMessage, \"greeting should not update\");\n          return;\n        }\n        assert(false, \"greeting should not update\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "chapter-4/greeter/truffle-config.js",
    "content": "/**\n * Use this file to configure your truffle project. It's seeded with some\n * common settings for different networks and features like migrations,\n * compilation and testing. Uncomment the ones you need or modify\n * them to suit your project as necessary.\n *\n * More information about configuration can be found at:\n *\n * truffleframework.com/docs/advanced/configuration\n *\n * To deploy via Infura you'll need a wallet provider (like truffle-hdwallet-provider)\n * to sign your transactions before they're sent to a remote public node. Infura accounts\n * are available for free at: infura.io/register.\n *\n * You'll also need a mnemonic - the twelve word phrase the wallet uses to generate\n * public/private key pairs. If you're publishing your code to GitHub make sure you load this\n * phrase from a file you've .gitignored so it doesn't accidentally become public.\n *\n */\n\n// const HDWalletProvider = require('truffle-hdwallet-provider');\n// const infuraKey = \"fj4jll3k.....\";\n//\n// const fs = require('fs');\n// const mnemonic = fs.readFileSync(\".secret\").toString().trim();\n\nmodule.exports = {\n  /**\n   * Networks define how you connect to your ethereum client and let you set the\n   * defaults web3 uses to send transactions. If you don't specify one truffle\n   * will spin up a development blockchain for you on port 9545 when you\n   * run `develop` or `test`. You can ask a truffle command to use a specific\n   * network from the command line, e.g\n   *\n   * $ truffle test --network <network-name>\n   */\n\n  networks: {\n    // Useful for testing. The `development` name is special - truffle uses it by default\n    // if it's defined here and no other network is specified at the command line.\n    // You should run a client (like ganache-cli, geth or parity) in a separate terminal\n    // tab if you use this network and you must also set the `host`, `port` and `network_id`\n    // options below to some value.\n    //\n    // development: {\n    //  host: \"127.0.0.1\",     // Localhost (default: none)\n    //  port: 8545,            // Standard Ethereum port (default: none)\n    //  network_id: \"*\",       // Any network (default: none)\n    // },\n\n    // Another network with more advanced options...\n    // advanced: {\n      // port: 8777,             // Custom port\n      // network_id: 1342,       // Custom network\n      // gas: 8500000,           // Gas sent with each transaction (default: ~6700000)\n      // gasPrice: 20000000000,  // 20 gwei (in wei) (default: 100 gwei)\n      // from: <address>,        // Account to send txs from (default: accounts[0])\n      // websockets: true        // Enable EventEmitter interface for web3 (default: false)\n    // },\n\n    // Useful for deploying to a public network.\n    // NB: It's important to wrap the provider as a function.\n    // ropsten: {\n      // provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/YOUR-PROJECT-ID`),\n      // network_id: 3,       // Ropsten's id\n      // gas: 5500000,        // Ropsten has a lower block limit than mainnet\n      // confirmations: 2,    // # of confs to wait between deployments. (default: 0)\n      // timeoutBlocks: 200,  // # of blocks before a deployment times out  (minimum/default: 50)\n      // skipDryRun: true     // Skip dry run before migrations? (default: false for public nets )\n    // },\n\n    // Useful for private networks\n    // private: {\n      // provider: () => new HDWalletProvider(mnemonic, `https://network.io`),\n      // network_id: 2111,   // This network is yours, in the cloud.\n      // production: true    // Treats this network as if it was a public net. (default: false)\n    // }\n  },\n\n  // Set default mocha options here, use special reporters etc.\n  mocha: {\n    // timeout: 100000\n  },\n\n  // Configure your compilers\n  compilers: {\n    solc: {\n      // version: \"0.5.1\",    // Fetch exact version from solc-bin (default: truffle's version)\n      // docker: true,        // Use \"0.5.1\" you've installed locally with docker (default: false)\n      // settings: {          // See the solidity docs for advice about optimization and evmVersion\n      //  optimizer: {\n      //    enabled: false,\n      //    runs: 200\n      //  },\n      //  evmVersion: \"byzantium\"\n      // }\n    }\n  }\n}\n"
  },
  {
    "path": "chapter-5/greeter/client/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/build\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "chapter-5/greeter/client/README.md",
    "content": "This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).\n\n## Available Scripts\n\nIn the project directory, you can run:\n\n### `npm start`\n\nRuns the app in the development mode.<br>\nOpen [http://localhost:3000](http://localhost:3000) to view it in the browser.\n\nThe page will reload if you make edits.<br>\nYou will also see any lint errors in the console.\n\n### `npm test`\n\nLaunches the test runner in the interactive watch mode.<br>\nSee the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.\n\n### `npm run build`\n\nBuilds the app for production to the `build` folder.<br>\nIt correctly bundles React in production mode and optimizes the build for the best performance.\n\nThe build is minified and the filenames include the hashes.<br>\nYour app is ready to be deployed!\n\nSee the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.\n\n### `npm run eject`\n\n**Note: this is a one-way operation. Once you `eject`, you can’t go back!**\n\nIf you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.\n\nInstead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.\n\nYou don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.\n\n## Learn More\n\nYou can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).\n\nTo learn React, check out the [React documentation](https://reactjs.org/).\n"
  },
  {
    "path": "chapter-5/greeter/client/package.json",
    "content": "{\n  \"name\": \"client\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"react\": \"^16.6.3\",\n    \"react-dom\": \"^16.6.3\",\n    \"react-scripts\": \"2.1.1\",\n    \"web3\": \"^1.3.4\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\"\n  },\n  \"eslintConfig\": {\n    \"extends\": \"react-app\"\n  },\n  \"browserslist\": [\n    \">0.2%\",\n    \"not dead\",\n    \"not ie <= 11\",\n    \"not op_mini all\"\n  ]\n}\n"
  },
  {
    "path": "chapter-5/greeter/client/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <link rel=\"shortcut icon\" href=\"%PUBLIC_URL%/favicon.ico\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <meta name=\"theme-color\" content=\"#000000\">\n    <!--\n      manifest.json provides metadata used when your web app is added to the\n      homescreen on Android. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\">\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>React App</title>\n  </head>\n  <body>\n    <noscript>\n      You need to enable JavaScript to run this app.\n    </noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "chapter-5/greeter/client/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "chapter-5/greeter/client/src/App.css",
    "content": ".App {\n  text-align: center;\n}\n\n.App-logo {\n  animation: App-logo-spin infinite 20s linear;\n  height: 40vmin;\n}\n\n.App-header {\n  background-color: #282c34;\n  min-height: 100vh;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  font-size: calc(10px + 2vmin);\n  color: white;\n}\n\n.App-link {\n  color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n"
  },
  {
    "path": "chapter-5/greeter/client/src/App.js",
    "content": "import React, { Component } from \"react\";\nimport GreeterContract from \"./contracts/Greeter.json\";\nimport getWeb3 from \"./utils/getWeb3\";\n\nimport \"./App.css\";\n\nclass App extends Component {\n  state = { greeting: '', web3: null, accounts: null, contract: null };\n\n  componentDidMount = async () => {\n    try {\n      // Get network provider and web3 instance.\n      const web3 = await getWeb3();\n\n      // Use web3 to get the user's accounts.\n      const accounts = await web3.eth.getAccounts();\n\n      // Get the contract instance.\n      const networkId = await web3.eth.net.getId();\n      const deployedNetwork = GreeterContract.networks[networkId];\n      const instance = new web3.eth.Contract(\n        GreeterContract.abi,\n        deployedNetwork && deployedNetwork.address,\n      );\n\n      // Set web3, accounts, and contract to the state, and then proceed with an\n      // example of interacting with the contract's methods.\n      this.setState({ web3, accounts, contract: instance }, this.runExample);\n    } catch (error) {\n      // Catch any errors for any of the above operations.\n      alert(\n        `Failed to load web3, accounts, or contract. Check console for details.`,\n      );\n      console.error(error);\n    }\n  };\n\n  runExample = async () => {\n    const { accounts, contract } = this.state;\n    const response = await contract.methods.greet().call()\n\n    this.setState({ greeting: response });\n  };\n\n  handleGreetingChange = (e) => {\n    const inputVal = e.target.value\n    this.setState({ greeting: inputVal })\n  }\n\n  formSubmitHandler = async () => {\n    const { accounts, contract, greeting } = this.state;\n    const updatedGreeting = await contract.methods.setGreeting(greeting).send({from: accounts[0]});\n  }\n\n  render() {\n    if (!this.state.web3) {\n      return <div>Loading Web3, accounts, and contract...</div>;\n    }\n    return (\n      <div className=\"App\">\n        <h1>Greeter</h1>\n\n        {this.state.greeting}\n\n        <form>\n          <label>\n            New Greeting:\n            <input type=\"text\" value={this.state.greeting} onChange={e => this.handleGreetingChange(e)} />\n          </label>\n        </form>\n\n        <button onClick={this.formSubmitHandler}> Submit </button>\n\n      </div>\n    );\n  }\n}\n\nexport default App;\n"
  },
  {
    "path": "chapter-5/greeter/client/src/App.test.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nit('renders without crashing', () => {\n  const div = document.createElement('div');\n  ReactDOM.render(<App />, div);\n  ReactDOM.unmountComponentAtNode(div);\n});\n"
  },
  {
    "path": "chapter-5/greeter/client/src/contracts/Context.json",
    "content": "{\n  \"contractName\": \"Context\",\n  \"abi\": [],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"openzeppelin-solidity/contracts/utils/Context.sol\\\":\\\"Context\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"openzeppelin-solidity/contracts/utils/Context.sol\\\":{\\\"keccak256\\\":\\\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\\\",\\\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x\",\n  \"deployedBytecode\": \"0x\",\n  \"immutableReferences\": {},\n  \"sourceMap\": \"\",\n  \"deployedSourceMap\": \"\",\n  \"source\": \"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address payable) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes memory) {\\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n        return msg.data;\\n    }\\n}\\n\",\n  \"sourcePath\": \"openzeppelin-solidity/contracts/utils/Context.sol\",\n  \"ast\": {\n    \"absolutePath\": \"openzeppelin-solidity/contracts/utils/Context.sol\",\n    \"exportedSymbols\": {\n      \"Context\": [\n        218\n      ]\n    },\n    \"id\": 219,\n    \"license\": \"MIT\",\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 197,\n        \"literals\": [\n          \"solidity\",\n          \">=\",\n          \"0.6\",\n          \".0\",\n          \"<\",\n          \"0.8\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"33:31:3\"\n      },\n      {\n        \"abstract\": true,\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 218,\n        \"linearizedBaseContracts\": [\n          218\n        ],\n        \"name\": \"Context\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"body\": {\n              \"id\": 205,\n              \"nodeType\": \"Block\",\n              \"src\": \"668:34:3\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 202,\n                      \"name\": \"msg\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": -15,\n                      \"src\": \"685:3:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_magic_message\",\n                        \"typeString\": \"msg\"\n                      }\n                    },\n                    \"id\": 203,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"sender\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"685:10:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"functionReturnParameters\": 201,\n                  \"id\": 204,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"678:17:3\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 206,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"_msgSender\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 198,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"617:2:3\"\n            },\n            \"returnParameters\": {\n              \"id\": 201,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 200,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 206,\n                  \"src\": \"651:15:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"typeName\": {\n                    \"id\": 199,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"651:15:3\",\n                    \"stateMutability\": \"payable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"650:17:3\"\n            },\n            \"scope\": 218,\n            \"src\": \"598:104:3\",\n            \"stateMutability\": \"view\",\n            \"virtual\": true,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 216,\n              \"nodeType\": \"Block\",\n              \"src\": \"773:165:3\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 211,\n                    \"name\": \"this\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": -28,\n                    \"src\": \"783:4:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Context_$218\",\n                      \"typeString\": \"contract Context\"\n                    }\n                  },\n                  \"id\": 212,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"783:4:3\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 213,\n                      \"name\": \"msg\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": -15,\n                      \"src\": \"923:3:3\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_magic_message\",\n                        \"typeString\": \"msg\"\n                      }\n                    },\n                    \"id\": 214,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"data\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"923:8:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bytes_calldata_ptr\",\n                      \"typeString\": \"bytes calldata\"\n                    }\n                  },\n                  \"functionReturnParameters\": 210,\n                  \"id\": 215,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"916:15:3\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 217,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"_msgData\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 207,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"725:2:3\"\n            },\n            \"returnParameters\": {\n              \"id\": 210,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 209,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 217,\n                  \"src\": \"759:12:3\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                    \"typeString\": \"bytes\"\n                  },\n                  \"typeName\": {\n                    \"id\": 208,\n                    \"name\": \"bytes\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"759:5:3\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bytes_storage_ptr\",\n                      \"typeString\": \"bytes\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"758:14:3\"\n            },\n            \"scope\": 218,\n            \"src\": \"708:230:3\",\n            \"stateMutability\": \"view\",\n            \"virtual\": true,\n            \"visibility\": \"internal\"\n          }\n        ],\n        \"scope\": 219,\n        \"src\": \"566:374:3\"\n      }\n    ],\n    \"src\": \"33:908:3\"\n  },\n  \"legacyAST\": {\n    \"attributes\": {\n      \"absolutePath\": \"openzeppelin-solidity/contracts/utils/Context.sol\",\n      \"exportedSymbols\": {\n        \"Context\": [\n          218\n        ]\n      },\n      \"license\": \"MIT\"\n    },\n    \"children\": [\n      {\n        \"attributes\": {\n          \"literals\": [\n            \"solidity\",\n            \">=\",\n            \"0.6\",\n            \".0\",\n            \"<\",\n            \"0.8\",\n            \".0\"\n          ]\n        },\n        \"id\": 197,\n        \"name\": \"PragmaDirective\",\n        \"src\": \"33:31:3\"\n      },\n      {\n        \"attributes\": {\n          \"abstract\": true,\n          \"baseContracts\": [\n            null\n          ],\n          \"contractDependencies\": [\n            null\n          ],\n          \"contractKind\": \"contract\",\n          \"documentation\": null,\n          \"fullyImplemented\": true,\n          \"linearizedBaseContracts\": [\n            218\n          ],\n          \"name\": \"Context\",\n          \"scope\": 219\n        },\n        \"children\": [\n          {\n            \"attributes\": {\n              \"documentation\": null,\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [\n                null\n              ],\n              \"name\": \"_msgSender\",\n              \"overrides\": null,\n              \"scope\": 218,\n              \"stateMutability\": \"view\",\n              \"virtual\": true,\n              \"visibility\": \"internal\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"parameters\": [\n                    null\n                  ]\n                },\n                \"children\": [],\n                \"id\": 198,\n                \"name\": \"ParameterList\",\n                \"src\": \"617:2:3\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 206,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address payable\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"payable\",\n                          \"type\": \"address payable\"\n                        },\n                        \"id\": 199,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"651:15:3\"\n                      }\n                    ],\n                    \"id\": 200,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"651:15:3\"\n                  }\n                ],\n                \"id\": 201,\n                \"name\": \"ParameterList\",\n                \"src\": \"650:17:3\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 201\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"member_name\": \"sender\",\n                          \"referencedDeclaration\": null,\n                          \"type\": \"address payable\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [\n                                null\n                              ],\n                              \"referencedDeclaration\": -15,\n                              \"type\": \"msg\",\n                              \"value\": \"msg\"\n                            },\n                            \"id\": 202,\n                            \"name\": \"Identifier\",\n                            \"src\": \"685:3:3\"\n                          }\n                        ],\n                        \"id\": 203,\n                        \"name\": \"MemberAccess\",\n                        \"src\": \"685:10:3\"\n                      }\n                    ],\n                    \"id\": 204,\n                    \"name\": \"Return\",\n                    \"src\": \"678:17:3\"\n                  }\n                ],\n                \"id\": 205,\n                \"name\": \"Block\",\n                \"src\": \"668:34:3\"\n              }\n            ],\n            \"id\": 206,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"598:104:3\"\n          },\n          {\n            \"attributes\": {\n              \"documentation\": null,\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [\n                null\n              ],\n              \"name\": \"_msgData\",\n              \"overrides\": null,\n              \"scope\": 218,\n              \"stateMutability\": \"view\",\n              \"virtual\": true,\n              \"visibility\": \"internal\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"parameters\": [\n                    null\n                  ]\n                },\n                \"children\": [],\n                \"id\": 207,\n                \"name\": \"ParameterList\",\n                \"src\": \"725:2:3\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 217,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"memory\",\n                      \"type\": \"bytes\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"bytes\",\n                          \"type\": \"bytes\"\n                        },\n                        \"id\": 208,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"759:5:3\"\n                      }\n                    ],\n                    \"id\": 209,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"759:12:3\"\n                  }\n                ],\n                \"id\": 210,\n                \"name\": \"ParameterList\",\n                \"src\": \"758:14:3\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"overloadedDeclarations\": [\n                            null\n                          ],\n                          \"referencedDeclaration\": -28,\n                          \"type\": \"contract Context\",\n                          \"value\": \"this\"\n                        },\n                        \"id\": 211,\n                        \"name\": \"Identifier\",\n                        \"src\": \"783:4:3\"\n                      }\n                    ],\n                    \"id\": 212,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"783:4:3\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 210\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"member_name\": \"data\",\n                          \"referencedDeclaration\": null,\n                          \"type\": \"bytes calldata\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [\n                                null\n                              ],\n                              \"referencedDeclaration\": -15,\n                              \"type\": \"msg\",\n                              \"value\": \"msg\"\n                            },\n                            \"id\": 213,\n                            \"name\": \"Identifier\",\n                            \"src\": \"923:3:3\"\n                          }\n                        ],\n                        \"id\": 214,\n                        \"name\": \"MemberAccess\",\n                        \"src\": \"923:8:3\"\n                      }\n                    ],\n                    \"id\": 215,\n                    \"name\": \"Return\",\n                    \"src\": \"916:15:3\"\n                  }\n                ],\n                \"id\": 216,\n                \"name\": \"Block\",\n                \"src\": \"773:165:3\"\n              }\n            ],\n            \"id\": 217,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"708:230:3\"\n          }\n        ],\n        \"id\": 218,\n        \"name\": \"ContractDefinition\",\n        \"src\": \"566:374:3\"\n      }\n    ],\n    \"id\": 219,\n    \"name\": \"SourceUnit\",\n    \"src\": \"33:908:3\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.3.4\",\n  \"updatedAt\": \"2021-03-29T15:59:14.528Z\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  }\n}"
  },
  {
    "path": "chapter-5/greeter/client/src/contracts/Greeter.json",
    "content": "{\n  \"contractName\": \"Greeter\",\n  \"abi\": [\n    {\n      \"constant\": false,\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"isOwner\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"greet\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"greeting\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setGreeting\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isOwner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"greeting\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setGreeting\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"greet\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{\\\"isOwner()\\\":{\\\"details\\\":\\\"Returns true if the caller is the current owner.\\\"},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}}},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/ksolo/Projects/oreilly/hoscdev/chapter-5/greeter/contracts/Greeter.sol\\\":\\\"Greeter\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/ksolo/Projects/oreilly/hoscdev/chapter-5/greeter/contracts/Greeter.sol\\\":{\\\"keccak256\\\":\\\"0x74e43d7c1b679a27f5480f4064e3f86c37c263b635357a52d006e81c58b815c3\\\",\\\"urls\\\":[\\\"bzzr://ad62d3d777461f480ffd9243f963a74eb9c761e6ae0c9c6e110f4b0589b8bdfc\\\"]},\\\"openzeppelin-solidity/contracts/ownership/Ownable.sol\\\":{\\\"keccak256\\\":\\\"0xf79fb10e8235770eb4aea7249034076a3cc9f9119ad944fc48705bae9c9d20dc\\\",\\\"urls\\\":[\\\"bzzr://d12a11272051eb6586de8f7e0a82c04a98c9984ce8b2a6cf1ee439f65aba29a9\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040526040518060400160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506001908051906020019061004f929190610111565b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36101b6565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061015257805160ff1916838001178555610180565b82800160010185558215610180579182015b8281111561017f578251825591602001919060010190610164565b5b50905061018d9190610191565b5090565b6101b391905b808211156101af576000816000905550600101610197565b5090565b90565b6107c9806101c56000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063715018a6146100675780638da5cb5b146100715780638f32d59b146100bb578063a4136862146100dd578063cfae321714610156578063f2fde38b146101d9575b600080fd5b61006f61021d565b005b610079610356565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100c361037f565b604051808215151515815260200191505060405180910390f35b610154600480360360208110156100f357600080fd5b810190808035906020019064010000000081111561011057600080fd5b82018360208201111561012257600080fd5b8035906020019184600183028401116401000000008311171561014457600080fd5b90919293919293905050506103d6565b005b61015e610466565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561019e578082015181840152602081019050610183565b50505050905090810190601f1680156101cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61021b600480360360208110156101ef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610508565b005b61022561037f565b610297576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6103de61037f565b610450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8181600191906104619291906106d2565b505050565b606060018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104fe5780601f106104d3576101008083540402835291602001916104fe565b820191906000526020600020905b8154815290600101906020018083116104e157829003601f168201915b5050505050905090565b61051061037f565b610582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61058b8161058e565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610614576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806107786026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061071357803560ff1916838001178555610741565b82800160010185558215610741579182015b82811115610740578235825591602001919060010190610725565b5b50905061074e9190610752565b5090565b61077491905b80821115610770576000816000905550600101610758565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a165627a7a723058202a337ad911415c0a06ebd28749cc2b5c52892e80014e1961edcb57dbdcefd54e0029\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100625760003560e01c8063715018a6146100675780638da5cb5b146100715780638f32d59b146100bb578063a4136862146100dd578063cfae321714610156578063f2fde38b146101d9575b600080fd5b61006f61021d565b005b610079610356565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100c361037f565b604051808215151515815260200191505060405180910390f35b610154600480360360208110156100f357600080fd5b810190808035906020019064010000000081111561011057600080fd5b82018360208201111561012257600080fd5b8035906020019184600183028401116401000000008311171561014457600080fd5b90919293919293905050506103d6565b005b61015e610466565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561019e578082015181840152602081019050610183565b50505050905090810190601f1680156101cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61021b600480360360208110156101ef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610508565b005b61022561037f565b610297576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6103de61037f565b610450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8181600191906104619291906106d2565b505050565b606060018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104fe5780601f106104d3576101008083540402835291602001916104fe565b820191906000526020600020905b8154815290600101906020018083116104e157829003601f168201915b5050505050905090565b61051061037f565b610582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61058b8161058e565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610614576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806107786026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061071357803560ff1916838001178555610741565b82800160010185558215610741579182015b82811115610740578235825591602001919060010190610725565b5b50905061074e9190610752565b5090565b61077491905b80821115610770576000816000905550600101610758565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a165627a7a723058202a337ad911415c0a06ebd28749cc2b5c52892e80014e1961edcb57dbdcefd54e0029\",\n  \"sourceMap\": \"100:263:0:-;;;132:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;666:10:2;657:6;;:19;;;;;;;;;;;;;;;;;;724:6;;;;;;;;;;;691:40;;720:1;691:40;;;;;;;;;;;;100:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;\",\n  \"deployedSourceMap\": \"100:263:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;100:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1599:137:2;;;:::i;:::-;;814:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1165:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;264:97:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;264:97:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;264:97:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;264:97:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;264:97:0;;;;;;;;;;;;:::i;:::-;;179:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;179:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1885:107:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1885:107:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;1599:137;1018:9;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1697:1;1660:40;;1681:6;;;;;;;;;;;1660:40;;;;;;;;;;;;1727:1;1710:6;;:19;;;;;;;;;;;;;;;;;;1599:137::o;814:77::-;852:7;878:6;;;;;;;;;;;871:13;;814:77;:::o;1165:90::-;1205:4;1242:6;;;;;;;;;;;1228:20;;:10;:20;;;1221:27;;1165:90;:::o;264:97:0:-;1018:9:2;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;348:8:0;;336:9;:20;;;;;;;:::i;:::-;;264:97;;:::o;179:81::-;218:13;246:9;239:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;179:81;:::o;1885:107:2:-;1018:9;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1957:28;1976:8;1957:18;:28::i;:::-;1885:107;:::o;2093:225::-;2186:1;2166:22;;:8;:22;;;;2158:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2275:8;2246:38;;2267:6;;;;;;;;;;;2246:38;;;;;;;;;;;;2303:8;2294:6;;:17;;;;;;;;;;;;;;;;;;2093:225;:::o;100:263:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o\",\n  \"source\": \"pragma solidity >= 0.4.0 < 0.7.0;\\n\\nimport \\\"openzeppelin-solidity/contracts/ownership/Ownable.sol\\\";\\n\\ncontract Greeter is Ownable {\\n  string private _greeting = \\\"Hello, World!\\\";\\n\\n  function greet() external view returns(string memory) {\\n    return _greeting;\\n  }\\n\\n  function setGreeting(string calldata greeting) external onlyOwner {\\n    _greeting = greeting;\\n  }\\n}\\n\",\n  \"sourcePath\": \"/Users/ksolo/Projects/oreilly/hoscdev/chapter-5/greeter/contracts/Greeter.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/Users/ksolo/Projects/oreilly/hoscdev/chapter-5/greeter/contracts/Greeter.sol\",\n    \"exportedSymbols\": {\n      \"Greeter\": [\n        28\n      ]\n    },\n    \"id\": 29,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 1,\n        \"literals\": [\n          \"solidity\",\n          \">=\",\n          \"0.4\",\n          \".0\",\n          \"<\",\n          \"0.7\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:33:0\"\n      },\n      {\n        \"absolutePath\": \"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\n        \"file\": \"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\n        \"id\": 2,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 29,\n        \"sourceUnit\": 197,\n        \"src\": \"35:63:0\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 3,\n              \"name\": \"Ownable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 196,\n              \"src\": \"120:7:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_Ownable_$196\",\n                \"typeString\": \"contract Ownable\"\n              }\n            },\n            \"id\": 4,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"120:7:0\"\n          }\n        ],\n        \"contractDependencies\": [\n          196\n        ],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 28,\n        \"linearizedBaseContracts\": [\n          28,\n          196\n        ],\n        \"name\": \"Greeter\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 7,\n            \"name\": \"_greeting\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 28,\n            \"src\": \"132:42:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 5,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"132:6:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"48656c6c6f2c20576f726c6421\",\n              \"id\": 6,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"string\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"159:15:0\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_stringliteral_acaf3289d7b601cbd114fb36c4d29c85bbfd5e133f14cb355c3fd8d99367964f\",\n                \"typeString\": \"literal_string \\\"Hello, World!\\\"\"\n              },\n              \"value\": \"Hello, World!\"\n            },\n            \"visibility\": \"private\"\n          },\n          {\n            \"body\": {\n              \"id\": 14,\n              \"nodeType\": \"Block\",\n              \"src\": \"233:27:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 12,\n                    \"name\": \"_greeting\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 7,\n                    \"src\": \"246:9:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"functionReturnParameters\": 11,\n                  \"id\": 13,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"239:16:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 15,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"greet\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 8,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"193:2:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 11,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 10,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 15,\n                  \"src\": \"218:13:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"218:6:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"217:15:0\"\n            },\n            \"scope\": 28,\n            \"src\": \"179:81:0\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 26,\n              \"nodeType\": \"Block\",\n              \"src\": \"330:31:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 24,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 22,\n                      \"name\": \"_greeting\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7,\n                      \"src\": \"336:9:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 23,\n                      \"name\": \"greeting\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 17,\n                      \"src\": \"348:8:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_calldata_ptr\",\n                        \"typeString\": \"string calldata\"\n                      }\n                    },\n                    \"src\": \"336:20:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 25,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"336:20:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 27,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 20,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 19,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 129,\n                  \"src\": \"320:9:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"320:9:0\"\n              }\n            ],\n            \"name\": \"setGreeting\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 18,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 17,\n                  \"name\": \"greeting\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 27,\n                  \"src\": \"285:24:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"calldata\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_calldata_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 16,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"285:6:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"284:26:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 21,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"330:0:0\"\n            },\n            \"scope\": 28,\n            \"src\": \"264:97:0\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 29,\n        \"src\": \"100:263:0\"\n      }\n    ],\n    \"src\": \"0:364:0\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"/Users/ksolo/Projects/oreilly/hoscdev/chapter-5/greeter/contracts/Greeter.sol\",\n    \"exportedSymbols\": {\n      \"Greeter\": [\n        28\n      ]\n    },\n    \"id\": 29,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 1,\n        \"literals\": [\n          \"solidity\",\n          \">=\",\n          \"0.4\",\n          \".0\",\n          \"<\",\n          \"0.7\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:33:0\"\n      },\n      {\n        \"absolutePath\": \"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\n        \"file\": \"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\n        \"id\": 2,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 29,\n        \"sourceUnit\": 197,\n        \"src\": \"35:63:0\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 3,\n              \"name\": \"Ownable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 196,\n              \"src\": \"120:7:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_Ownable_$196\",\n                \"typeString\": \"contract Ownable\"\n              }\n            },\n            \"id\": 4,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"120:7:0\"\n          }\n        ],\n        \"contractDependencies\": [\n          196\n        ],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 28,\n        \"linearizedBaseContracts\": [\n          28,\n          196\n        ],\n        \"name\": \"Greeter\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 7,\n            \"name\": \"_greeting\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 28,\n            \"src\": \"132:42:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 5,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"132:6:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"48656c6c6f2c20576f726c6421\",\n              \"id\": 6,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"string\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"159:15:0\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_stringliteral_acaf3289d7b601cbd114fb36c4d29c85bbfd5e133f14cb355c3fd8d99367964f\",\n                \"typeString\": \"literal_string \\\"Hello, World!\\\"\"\n              },\n              \"value\": \"Hello, World!\"\n            },\n            \"visibility\": \"private\"\n          },\n          {\n            \"body\": {\n              \"id\": 14,\n              \"nodeType\": \"Block\",\n              \"src\": \"233:27:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 12,\n                    \"name\": \"_greeting\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 7,\n                    \"src\": \"246:9:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"functionReturnParameters\": 11,\n                  \"id\": 13,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"239:16:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 15,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"greet\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 8,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"193:2:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 11,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 10,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 15,\n                  \"src\": \"218:13:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"218:6:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"217:15:0\"\n            },\n            \"scope\": 28,\n            \"src\": \"179:81:0\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 26,\n              \"nodeType\": \"Block\",\n              \"src\": \"330:31:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 24,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 22,\n                      \"name\": \"_greeting\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7,\n                      \"src\": \"336:9:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 23,\n                      \"name\": \"greeting\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 17,\n                      \"src\": \"348:8:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_calldata_ptr\",\n                        \"typeString\": \"string calldata\"\n                      }\n                    },\n                    \"src\": \"336:20:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 25,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"336:20:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 27,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 20,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 19,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 129,\n                  \"src\": \"320:9:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"320:9:0\"\n              }\n            ],\n            \"name\": \"setGreeting\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 18,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 17,\n                  \"name\": \"greeting\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 27,\n                  \"src\": \"285:24:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"calldata\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_calldata_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 16,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"285:6:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"284:26:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 21,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"330:0:0\"\n            },\n            \"scope\": 28,\n            \"src\": \"264:97:0\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 29,\n        \"src\": \"100:263:0\"\n      }\n    ],\n    \"src\": \"0:364:0\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.5.8+commit.23d335f2.Emscripten.clang\"\n  },\n  \"networks\": {\n    \"4\": {\n      \"events\": {},\n      \"links\": {},\n      \"address\": \"0x321374D4CD736Ce5484BFb3aF59C290639b73eA4\",\n      \"transactionHash\": \"0x94cc8f0ca97b2f4de8f1d33c47796d2f95b211e6b0470c2be22d228ad023e85d\"\n    },\n    \"5\": {\n      \"events\": {},\n      \"links\": {},\n      \"address\": \"0x321374D4CD736Ce5484BFb3aF59C290639b73eA4\",\n      \"transactionHash\": \"0x94cc8f0ca97b2f4de8f1d33c47796d2f95b211e6b0470c2be22d228ad023e85d\"\n    },\n    \"5777\": {\n      \"events\": {\n        \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\": {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\",\n          \"signature\": \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\"\n        }\n      },\n      \"links\": {},\n      \"address\": \"0x7525b94Cbadd6b68B921c6A5B6BCB7A792186206\",\n      \"transactionHash\": \"0x8514075705e5829b43610dca0d52ff8763a5cf4a71e084d5708f7f1133175d04\"\n    }\n  },\n  \"schemaVersion\": \"3.0.11\",\n  \"updatedAt\": \"2019-08-20T01:34:57.279Z\",\n  \"devdoc\": {\n    \"methods\": {\n      \"isOwner()\": {\n        \"details\": \"Returns true if the caller is the current owner.\"\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    }\n  },\n  \"userdoc\": {\n    \"methods\": {}\n  }\n}"
  },
  {
    "path": "chapter-5/greeter/client/src/contracts/Migrations.json",
    "content": "{\n  \"contractName\": \"Migrations\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"last_completed_migration\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"completed\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setCompleted\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"new_address\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"upgrade\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"new_address\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"upgrade\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"last_completed_migration\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"completed\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setCompleted\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{}},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/ksolo/Projects/oreilly/hoscdev/chapter-5/greeter/contracts/Migrations.sol\\\":\\\"Migrations\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/ksolo/Projects/oreilly/hoscdev/chapter-5/greeter/contracts/Migrations.sol\\\":{\\\"keccak256\\\":\\\"0xfdb731592344e2a2890faf03baec7b4bee7057ffba18ba6dbb6eec8db85f8f4c\\\",\\\"urls\\\":[\\\"bzzr://ddc8801d0a2a7220c2c9bf3881b4921817e72fdd96827ec8be4428fa009ace07\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102ae806100606000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630900f01014610051578063445df0ac146100955780638da5cb5b146100b3578063fdacd576146100fd575b600080fd5b6100936004803603602081101561006757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061012b565b005b61009d6101f7565b6040518082815260200191505060405180910390f35b6100bb6101fd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101296004803603602081101561011357600080fd5b8101908080359060200190929190505050610222565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101f45760008190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156101da57600080fd5b505af11580156101ee573d6000803e3d6000fd5b50505050505b50565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561027f57806001819055505b5056fea165627a7a72305820de6ceff753b5f9b856958e00070af50b31571f50fbdb76b21c3665866440ef220029\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80630900f01014610051578063445df0ac146100955780638da5cb5b146100b3578063fdacd576146100fd575b600080fd5b6100936004803603602081101561006757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061012b565b005b61009d6101f7565b6040518082815260200191505060405180910390f35b6100bb6101fd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101296004803603602081101561011357600080fd5b8101908080359060200190929190505050610222565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101f45760008190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156101da57600080fd5b505af11580156101ee573d6000803e3d6000fd5b50505050505b50565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561027f57806001819055505b5056fea165627a7a72305820de6ceff753b5f9b856958e00070af50b31571f50fbdb76b21c3665866440ef220029\",\n  \"sourceMap\": \"34:480:1:-;;;123:50;8:9:-1;5:2;;;30:1;27;20:12;5:2;123:50:1;158:10;150:5;;:18;;;;;;;;;;;;;;;;;;34:480;;;;;;\",\n  \"deployedSourceMap\": \"34:480:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34:480:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;347:165;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;347:165:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;82:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;58:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;240:103;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;240:103:1;;;;;;;;;;;;;;;;;:::i;:::-;;347:165;223:5;;;;;;;;;;;209:19;;:10;:19;;;205:26;;;409:19;442:11;409:45;;460:8;:21;;;482:24;;460:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;460:47:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;460:47:1;;;;230:1;205:26;347:165;:::o;82:36::-;;;;:::o;58:20::-;;;;;;;;;;;;;:::o;240:103::-;223:5;;;;;;;;;;;209:19;;:10;:19;;;205:26;;;329:9;302:24;:36;;;;205:26;240:103;:::o\",\n  \"source\": \"pragma solidity >=0.4.21 <0.6.0;\\n\\ncontract Migrations {\\n  address public owner;\\n  uint public last_completed_migration;\\n\\n  constructor() public {\\n    owner = msg.sender;\\n  }\\n\\n  modifier restricted() {\\n    if (msg.sender == owner) _;\\n  }\\n\\n  function setCompleted(uint completed) public restricted {\\n    last_completed_migration = completed;\\n  }\\n\\n  function upgrade(address new_address) public restricted {\\n    Migrations upgraded = Migrations(new_address);\\n    upgraded.setCompleted(last_completed_migration);\\n  }\\n}\\n\",\n  \"sourcePath\": \"/Users/ksolo/Projects/oreilly/hoscdev/chapter-5/greeter/contracts/Migrations.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/Users/ksolo/Projects/oreilly/hoscdev/chapter-5/greeter/contracts/Migrations.sol\",\n    \"exportedSymbols\": {\n      \"Migrations\": [\n        85\n      ]\n    },\n    \"id\": 86,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 30,\n        \"literals\": [\n          \"solidity\",\n          \">=\",\n          \"0.4\",\n          \".21\",\n          \"<\",\n          \"0.6\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:32:1\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 85,\n        \"linearizedBaseContracts\": [\n          85\n        ],\n        \"name\": \"Migrations\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 32,\n            \"name\": \"owner\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 85,\n            \"src\": \"58:20:1\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 31,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"58:7:1\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 34,\n            \"name\": \"last_completed_migration\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 85,\n            \"src\": \"82:36:1\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 33,\n              \"name\": \"uint\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"82:4:1\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 42,\n              \"nodeType\": \"Block\",\n              \"src\": \"144:29:1\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 40,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 37,\n                      \"name\": \"owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 32,\n                      \"src\": \"150:5:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 38,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 211,\n                        \"src\": \"158:3:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 39,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"158:10:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"150:18:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 41,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"150:18:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 43,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 35,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"134:2:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 36,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"144:0:1\"\n            },\n            \"scope\": 85,\n            \"src\": \"123:50:1\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 51,\n              \"nodeType\": \"Block\",\n              \"src\": \"199:37:1\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 48,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 45,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 211,\n                        \"src\": \"209:3:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 46,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"209:10:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 47,\n                      \"name\": \"owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 32,\n                      \"src\": \"223:5:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"209:19:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 50,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"205:26:1\",\n                  \"trueBody\": {\n                    \"id\": 49,\n                    \"nodeType\": \"PlaceholderStatement\",\n                    \"src\": \"230:1:1\"\n                  }\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 52,\n            \"name\": \"restricted\",\n            \"nodeType\": \"ModifierDefinition\",\n            \"parameters\": {\n              \"id\": 44,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"196:2:1\"\n            },\n            \"src\": \"177:59:1\",\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 63,\n              \"nodeType\": \"Block\",\n              \"src\": \"296:47:1\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 61,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 59,\n                      \"name\": \"last_completed_migration\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 34,\n                      \"src\": \"302:24:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 60,\n                      \"name\": \"completed\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 54,\n                      \"src\": \"329:9:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"302:36:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 62,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"302:36:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 64,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 57,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 56,\n                  \"name\": \"restricted\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 52,\n                  \"src\": \"285:10:1\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"285:10:1\"\n              }\n            ],\n            \"name\": \"setCompleted\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 55,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 54,\n                  \"name\": \"completed\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 64,\n                  \"src\": \"262:14:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"262:4:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"261:16:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 58,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"296:0:1\"\n            },\n            \"scope\": 85,\n            \"src\": \"240:103:1\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 83,\n              \"nodeType\": \"Block\",\n              \"src\": \"403:109:1\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    72\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 72,\n                      \"name\": \"upgraded\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 83,\n                      \"src\": \"409:19:1\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Migrations_$85\",\n                        \"typeString\": \"contract Migrations\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 71,\n                        \"name\": \"Migrations\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 85,\n                        \"src\": \"409:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Migrations_$85\",\n                          \"typeString\": \"contract Migrations\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 76,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 74,\n                        \"name\": \"new_address\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 66,\n                        \"src\": \"442:11:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 73,\n                      \"name\": \"Migrations\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 85,\n                      \"src\": \"431:10:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_contract$_Migrations_$85_$\",\n                        \"typeString\": \"type(contract Migrations)\"\n                      }\n                    },\n                    \"id\": 75,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"431:23:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Migrations_$85\",\n                      \"typeString\": \"contract Migrations\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"409:45:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 80,\n                        \"name\": \"last_completed_migration\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 34,\n                        \"src\": \"482:24:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 77,\n                        \"name\": \"upgraded\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 72,\n                        \"src\": \"460:8:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Migrations_$85\",\n                          \"typeString\": \"contract Migrations\"\n                        }\n                      },\n                      \"id\": 79,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"setCompleted\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 64,\n                      \"src\": \"460:21:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_nonpayable$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (uint256) external\"\n                      }\n                    },\n                    \"id\": 81,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"460:47:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 82,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"460:47:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 84,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 69,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 68,\n                  \"name\": \"restricted\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 52,\n                  \"src\": \"392:10:1\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"392:10:1\"\n              }\n            ],\n            \"name\": \"upgrade\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 67,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 66,\n                  \"name\": \"new_address\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 84,\n                  \"src\": \"364:19:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 65,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"364:7:1\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"363:21:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 70,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"403:0:1\"\n            },\n            \"scope\": 85,\n            \"src\": \"347:165:1\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          }\n        ],\n        \"scope\": 86,\n        \"src\": \"34:480:1\"\n      }\n    ],\n    \"src\": \"0:515:1\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"/Users/ksolo/Projects/oreilly/hoscdev/chapter-5/greeter/contracts/Migrations.sol\",\n    \"exportedSymbols\": {\n      \"Migrations\": [\n        85\n      ]\n    },\n    \"id\": 86,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 30,\n        \"literals\": [\n          \"solidity\",\n          \">=\",\n          \"0.4\",\n          \".21\",\n          \"<\",\n          \"0.6\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:32:1\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 85,\n        \"linearizedBaseContracts\": [\n          85\n        ],\n        \"name\": \"Migrations\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 32,\n            \"name\": \"owner\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 85,\n            \"src\": \"58:20:1\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 31,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"58:7:1\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 34,\n            \"name\": \"last_completed_migration\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 85,\n            \"src\": \"82:36:1\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 33,\n              \"name\": \"uint\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"82:4:1\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 42,\n              \"nodeType\": \"Block\",\n              \"src\": \"144:29:1\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 40,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 37,\n                      \"name\": \"owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 32,\n                      \"src\": \"150:5:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 38,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 211,\n                        \"src\": \"158:3:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 39,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"158:10:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"150:18:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 41,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"150:18:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 43,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 35,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"134:2:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 36,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"144:0:1\"\n            },\n            \"scope\": 85,\n            \"src\": \"123:50:1\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 51,\n              \"nodeType\": \"Block\",\n              \"src\": \"199:37:1\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 48,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 45,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 211,\n                        \"src\": \"209:3:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 46,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"209:10:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 47,\n                      \"name\": \"owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 32,\n                      \"src\": \"223:5:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"209:19:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 50,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"205:26:1\",\n                  \"trueBody\": {\n                    \"id\": 49,\n                    \"nodeType\": \"PlaceholderStatement\",\n                    \"src\": \"230:1:1\"\n                  }\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 52,\n            \"name\": \"restricted\",\n            \"nodeType\": \"ModifierDefinition\",\n            \"parameters\": {\n              \"id\": 44,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"196:2:1\"\n            },\n            \"src\": \"177:59:1\",\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 63,\n              \"nodeType\": \"Block\",\n              \"src\": \"296:47:1\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 61,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 59,\n                      \"name\": \"last_completed_migration\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 34,\n                      \"src\": \"302:24:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 60,\n                      \"name\": \"completed\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 54,\n                      \"src\": \"329:9:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"302:36:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 62,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"302:36:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 64,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 57,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 56,\n                  \"name\": \"restricted\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 52,\n                  \"src\": \"285:10:1\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"285:10:1\"\n              }\n            ],\n            \"name\": \"setCompleted\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 55,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 54,\n                  \"name\": \"completed\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 64,\n                  \"src\": \"262:14:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"262:4:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"261:16:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 58,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"296:0:1\"\n            },\n            \"scope\": 85,\n            \"src\": \"240:103:1\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 83,\n              \"nodeType\": \"Block\",\n              \"src\": \"403:109:1\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    72\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 72,\n                      \"name\": \"upgraded\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 83,\n                      \"src\": \"409:19:1\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Migrations_$85\",\n                        \"typeString\": \"contract Migrations\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 71,\n                        \"name\": \"Migrations\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 85,\n                        \"src\": \"409:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Migrations_$85\",\n                          \"typeString\": \"contract Migrations\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 76,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 74,\n                        \"name\": \"new_address\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 66,\n                        \"src\": \"442:11:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 73,\n                      \"name\": \"Migrations\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 85,\n                      \"src\": \"431:10:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_contract$_Migrations_$85_$\",\n                        \"typeString\": \"type(contract Migrations)\"\n                      }\n                    },\n                    \"id\": 75,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"431:23:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Migrations_$85\",\n                      \"typeString\": \"contract Migrations\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"409:45:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 80,\n                        \"name\": \"last_completed_migration\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 34,\n                        \"src\": \"482:24:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 77,\n                        \"name\": \"upgraded\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 72,\n                        \"src\": \"460:8:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Migrations_$85\",\n                          \"typeString\": \"contract Migrations\"\n                        }\n                      },\n                      \"id\": 79,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"setCompleted\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 64,\n                      \"src\": \"460:21:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_nonpayable$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (uint256) external\"\n                      }\n                    },\n                    \"id\": 81,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"460:47:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 82,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"460:47:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 84,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 69,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 68,\n                  \"name\": \"restricted\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 52,\n                  \"src\": \"392:10:1\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"392:10:1\"\n              }\n            ],\n            \"name\": \"upgrade\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 67,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 66,\n                  \"name\": \"new_address\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 84,\n                  \"src\": \"364:19:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 65,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"364:7:1\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"363:21:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 70,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"403:0:1\"\n            },\n            \"scope\": 85,\n            \"src\": \"347:165:1\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          }\n        ],\n        \"scope\": 86,\n        \"src\": \"34:480:1\"\n      }\n    ],\n    \"src\": \"0:515:1\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.5.8+commit.23d335f2.Emscripten.clang\"\n  },\n  \"networks\": {\n    \"4\": {\n      \"events\": {},\n      \"links\": {},\n      \"address\": \"0x74c7382e11311530757beDb953D7F302cfAef417\",\n      \"transactionHash\": \"0x6e57a078b7d9fdf6a1bc7c777951271220ae3b9f03a62c92991dc0923610b157\"\n    },\n    \"5\": {\n      \"events\": {},\n      \"links\": {},\n      \"address\": \"0x74c7382e11311530757beDb953D7F302cfAef417\",\n      \"transactionHash\": \"0x6e57a078b7d9fdf6a1bc7c777951271220ae3b9f03a62c92991dc0923610b157\"\n    },\n    \"5777\": {\n      \"events\": {},\n      \"links\": {},\n      \"address\": \"0xA90Fb5Ad2D6845B073626971267eFa6a713892a7\",\n      \"transactionHash\": \"0x58b3f0669a316f8818c9ec9245c9cb45c4bf12e1f992c334f2275faaf5e41153\"\n    }\n  },\n  \"schemaVersion\": \"3.0.11\",\n  \"updatedAt\": \"2019-08-20T01:34:57.281Z\",\n  \"devdoc\": {\n    \"methods\": {}\n  },\n  \"userdoc\": {\n    \"methods\": {}\n  }\n}"
  },
  {
    "path": "chapter-5/greeter/client/src/contracts/Ownable.json",
    "content": "{\n  \"contractName\": \"Ownable\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"isOwner\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isOwner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"}],\\\"devdoc\\\":{\\\"details\\\":\\\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. * This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be aplied to your functions to restrict their use to the owner.\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Initializes the contract setting the deployer as the initial owner.\\\"},\\\"isOwner()\\\":{\\\"details\\\":\\\"Returns true if the caller is the current owner.\\\"},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}}},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"openzeppelin-solidity/contracts/ownership/Ownable.sol\\\":\\\"Ownable\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"openzeppelin-solidity/contracts/ownership/Ownable.sol\\\":{\\\"keccak256\\\":\\\"0xf79fb10e8235770eb4aea7249034076a3cc9f9119ad944fc48705bae9c9d20dc\\\",\\\"urls\\\":[\\\"bzzr://d12a11272051eb6586de8f7e0a82c04a98c9984ce8b2a6cf1ee439f65aba29a9\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x\",\n  \"deployedBytecode\": \"0x\",\n  \"sourceMap\": \"\",\n  \"deployedSourceMap\": \"\",\n  \"source\": \"pragma solidity ^0.5.0;\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be aplied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor () internal {\\n        _owner = msg.sender;\\n        emit OwnershipTransferred(address(0), _owner);\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        require(isOwner(), \\\"Ownable: caller is not the owner\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the caller is the current owner.\\n     */\\n    function isOwner() public view returns (bool) {\\n        return msg.sender == _owner;\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * > Note: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public onlyOwner {\\n        emit OwnershipTransferred(_owner, address(0));\\n        _owner = address(0);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public onlyOwner {\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     */\\n    function _transferOwnership(address newOwner) internal {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        emit OwnershipTransferred(_owner, newOwner);\\n        _owner = newOwner;\\n    }\\n}\\n\",\n  \"sourcePath\": \"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\n  \"ast\": {\n    \"absolutePath\": \"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\n    \"exportedSymbols\": {\n      \"Ownable\": [\n        196\n      ]\n    },\n    \"id\": 197,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 87,\n        \"literals\": [\n          \"solidity\",\n          \"^\",\n          \"0.5\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:2\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": \"@dev Contract module which provides a basic access control mechanism, where\\nthere is an account (an owner) that can be granted exclusive access to\\nspecific functions.\\n * This module is used through inheritance. It will make available the modifier\\n`onlyOwner`, which can be aplied to your functions to restrict their use to\\nthe owner.\",\n        \"fullyImplemented\": true,\n        \"id\": 196,\n        \"linearizedBaseContracts\": [\n          196\n        ],\n        \"name\": \"Ownable\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 89,\n            \"name\": \"_owner\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 196,\n            \"src\": \"408:22:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 88,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"408:7:2\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 95,\n            \"name\": \"OwnershipTransferred\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 94,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 91,\n                  \"indexed\": true,\n                  \"name\": \"previousOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 95,\n                  \"src\": \"464:29:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 90,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"464:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 93,\n                  \"indexed\": true,\n                  \"name\": \"newOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 95,\n                  \"src\": \"495:24:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 92,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"495:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"463:57:2\"\n            },\n            \"src\": \"437:84:2\"\n          },\n          {\n            \"body\": {\n              \"id\": 110,\n              \"nodeType\": \"Block\",\n              \"src\": \"647:91:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 101,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 98,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 89,\n                      \"src\": \"657:6:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 99,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 211,\n                        \"src\": \"666:3:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 100,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"666:10:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"657:19:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 102,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"657:19:2\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 105,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"720:1:2\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            }\n                          ],\n                          \"id\": 104,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"712:7:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": \"address\"\n                        },\n                        \"id\": 106,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"712:10:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 107,\n                        \"name\": \"_owner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 89,\n                        \"src\": \"724:6:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 103,\n                      \"name\": \"OwnershipTransferred\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 95,\n                      \"src\": \"691:20:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 108,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"691:40:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 109,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"686:45:2\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Initializes the contract setting the deployer as the initial owner.\",\n            \"id\": 111,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 96,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"635:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 97,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"647:0:2\"\n            },\n            \"scope\": 196,\n            \"src\": \"623:115:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 118,\n              \"nodeType\": \"Block\",\n              \"src\": \"861:30:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 116,\n                    \"name\": \"_owner\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 89,\n                    \"src\": \"878:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"functionReturnParameters\": 115,\n                  \"id\": 117,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"871:13:2\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns the address of the current owner.\",\n            \"id\": 119,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"owner\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 112,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"828:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 115,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 114,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 119,\n                  \"src\": \"852:7:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 113,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"852:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"851:9:2\"\n            },\n            \"scope\": 196,\n            \"src\": \"814:77:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 128,\n              \"nodeType\": \"Block\",\n              \"src\": \"1000:82:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [],\n                        \"expression\": {\n                          \"argumentTypes\": [],\n                          \"id\": 122,\n                          \"name\": \"isOwner\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 140,\n                          \"src\": \"1018:7:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_view$__$returns$_t_bool_$\",\n                            \"typeString\": \"function () view returns (bool)\"\n                          }\n                        },\n                        \"id\": 123,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1018:9:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572\",\n                        \"id\": 124,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1029:34:2\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe\",\n                          \"typeString\": \"literal_string \\\"Ownable: caller is not the owner\\\"\"\n                        },\n                        \"value\": \"Ownable: caller is not the owner\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe\",\n                          \"typeString\": \"literal_string \\\"Ownable: caller is not the owner\\\"\"\n                        }\n                      ],\n                      \"id\": 121,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        214,\n                        215\n                      ],\n                      \"referencedDeclaration\": 215,\n                      \"src\": \"1010:7:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 125,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1010:54:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 126,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1010:54:2\"\n                },\n                {\n                  \"id\": 127,\n                  \"nodeType\": \"PlaceholderStatement\",\n                  \"src\": \"1074:1:2\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Throws if called by any account other than the owner.\",\n            \"id\": 129,\n            \"name\": \"onlyOwner\",\n            \"nodeType\": \"ModifierDefinition\",\n            \"parameters\": {\n              \"id\": 120,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"997:2:2\"\n            },\n            \"src\": \"979:103:2\",\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 139,\n              \"nodeType\": \"Block\",\n              \"src\": \"1211:44:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 137,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 134,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 211,\n                        \"src\": \"1228:3:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 135,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"1228:10:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 136,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 89,\n                      \"src\": \"1242:6:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"1228:20:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"functionReturnParameters\": 133,\n                  \"id\": 138,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1221:27:2\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns true if the caller is the current owner.\",\n            \"id\": 140,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"isOwner\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 130,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1181:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 133,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 132,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 140,\n                  \"src\": \"1205:4:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bool\",\n                    \"typeString\": \"bool\"\n                  },\n                  \"typeName\": {\n                    \"id\": 131,\n                    \"name\": \"bool\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1205:4:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1204:6:2\"\n            },\n            \"scope\": 196,\n            \"src\": \"1165:90:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 158,\n              \"nodeType\": \"Block\",\n              \"src\": \"1645:91:2\",\n              \"statements\": [\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 146,\n                        \"name\": \"_owner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 89,\n                        \"src\": \"1681:6:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 148,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"1697:1:2\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            }\n                          ],\n                          \"id\": 147,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"1689:7:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": \"address\"\n                        },\n                        \"id\": 149,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1689:10:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      ],\n                      \"id\": 145,\n                      \"name\": \"OwnershipTransferred\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 95,\n                      \"src\": \"1660:20:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 150,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1660:40:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 151,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"1655:45:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 156,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 152,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 89,\n                      \"src\": \"1710:6:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 154,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"1727:1:2\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 153,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"1719:7:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": \"address\"\n                      },\n                      \"id\": 155,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1719:10:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"1710:19:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 157,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1710:19:2\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Leaves the contract without owner. It will not be possible to call\\n`onlyOwner` functions anymore. Can only be called by the current owner.\\n     * > Note: Renouncing ownership will leave the contract without an owner,\\nthereby removing any functionality that is only available to the owner.\",\n            \"id\": 159,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 143,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 142,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 129,\n                  \"src\": \"1635:9:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"1635:9:2\"\n              }\n            ],\n            \"name\": \"renounceOwnership\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 141,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1625:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 144,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1645:0:2\"\n            },\n            \"scope\": 196,\n            \"src\": \"1599:137:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 170,\n              \"nodeType\": \"Block\",\n              \"src\": \"1947:45:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 167,\n                        \"name\": \"newOwner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 161,\n                        \"src\": \"1976:8:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 166,\n                      \"name\": \"_transferOwnership\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 195,\n                      \"src\": \"1957:18:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address)\"\n                      }\n                    },\n                    \"id\": 168,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1957:28:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 169,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1957:28:2\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Transfers ownership of the contract to a new account (`newOwner`).\\nCan only be called by the current owner.\",\n            \"id\": 171,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 164,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 163,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 129,\n                  \"src\": \"1937:9:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"1937:9:2\"\n              }\n            ],\n            \"name\": \"transferOwnership\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 162,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 161,\n                  \"name\": \"newOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 171,\n                  \"src\": \"1912:16:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 160,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1912:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1911:18:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 165,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1947:0:2\"\n            },\n            \"scope\": 196,\n            \"src\": \"1885:107:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 194,\n              \"nodeType\": \"Block\",\n              \"src\": \"2148:170:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 181,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 177,\n                          \"name\": \"newOwner\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 173,\n                          \"src\": \"2166:8:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 179,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"2186:1:2\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 178,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"2178:7:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": \"address\"\n                          },\n                          \"id\": 180,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2178:10:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"2166:22:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373\",\n                        \"id\": 182,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2190:40:2\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe\",\n                          \"typeString\": \"literal_string \\\"Ownable: new owner is the zero address\\\"\"\n                        },\n                        \"value\": \"Ownable: new owner is the zero address\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe\",\n                          \"typeString\": \"literal_string \\\"Ownable: new owner is the zero address\\\"\"\n                        }\n                      ],\n                      \"id\": 176,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        214,\n                        215\n                      ],\n                      \"referencedDeclaration\": 215,\n                      \"src\": \"2158:7:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 183,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2158:73:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 184,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2158:73:2\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 186,\n                        \"name\": \"_owner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 89,\n                        \"src\": \"2267:6:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 187,\n                        \"name\": \"newOwner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 173,\n                        \"src\": \"2275:8:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 185,\n                      \"name\": \"OwnershipTransferred\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 95,\n                      \"src\": \"2246:20:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 188,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2246:38:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 189,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"2241:43:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 192,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 190,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 89,\n                      \"src\": \"2294:6:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 191,\n                      \"name\": \"newOwner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 173,\n                      \"src\": \"2303:8:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"2294:17:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 193,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2294:17:2\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Transfers ownership of the contract to a new account (`newOwner`).\",\n            \"id\": 195,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"_transferOwnership\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 174,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 173,\n                  \"name\": \"newOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 195,\n                  \"src\": \"2121:16:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 172,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2121:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2120:18:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 175,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2148:0:2\"\n            },\n            \"scope\": 196,\n            \"src\": \"2093:225:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          }\n        ],\n        \"scope\": 197,\n        \"src\": \"385:1935:2\"\n      }\n    ],\n    \"src\": \"0:2321:2\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\n    \"exportedSymbols\": {\n      \"Ownable\": [\n        196\n      ]\n    },\n    \"id\": 197,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 87,\n        \"literals\": [\n          \"solidity\",\n          \"^\",\n          \"0.5\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:2\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": \"@dev Contract module which provides a basic access control mechanism, where\\nthere is an account (an owner) that can be granted exclusive access to\\nspecific functions.\\n * This module is used through inheritance. It will make available the modifier\\n`onlyOwner`, which can be aplied to your functions to restrict their use to\\nthe owner.\",\n        \"fullyImplemented\": true,\n        \"id\": 196,\n        \"linearizedBaseContracts\": [\n          196\n        ],\n        \"name\": \"Ownable\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 89,\n            \"name\": \"_owner\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 196,\n            \"src\": \"408:22:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 88,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"408:7:2\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 95,\n            \"name\": \"OwnershipTransferred\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 94,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 91,\n                  \"indexed\": true,\n                  \"name\": \"previousOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 95,\n                  \"src\": \"464:29:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 90,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"464:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 93,\n                  \"indexed\": true,\n                  \"name\": \"newOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 95,\n                  \"src\": \"495:24:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 92,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"495:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"463:57:2\"\n            },\n            \"src\": \"437:84:2\"\n          },\n          {\n            \"body\": {\n              \"id\": 110,\n              \"nodeType\": \"Block\",\n              \"src\": \"647:91:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 101,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 98,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 89,\n                      \"src\": \"657:6:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 99,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 211,\n                        \"src\": \"666:3:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 100,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"666:10:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"657:19:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 102,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"657:19:2\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 105,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"720:1:2\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            }\n                          ],\n                          \"id\": 104,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"712:7:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": \"address\"\n                        },\n                        \"id\": 106,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"712:10:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 107,\n                        \"name\": \"_owner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 89,\n                        \"src\": \"724:6:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 103,\n                      \"name\": \"OwnershipTransferred\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 95,\n                      \"src\": \"691:20:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 108,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"691:40:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 109,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"686:45:2\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Initializes the contract setting the deployer as the initial owner.\",\n            \"id\": 111,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 96,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"635:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 97,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"647:0:2\"\n            },\n            \"scope\": 196,\n            \"src\": \"623:115:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 118,\n              \"nodeType\": \"Block\",\n              \"src\": \"861:30:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 116,\n                    \"name\": \"_owner\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 89,\n                    \"src\": \"878:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"functionReturnParameters\": 115,\n                  \"id\": 117,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"871:13:2\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns the address of the current owner.\",\n            \"id\": 119,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"owner\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 112,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"828:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 115,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 114,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 119,\n                  \"src\": \"852:7:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 113,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"852:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"851:9:2\"\n            },\n            \"scope\": 196,\n            \"src\": \"814:77:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 128,\n              \"nodeType\": \"Block\",\n              \"src\": \"1000:82:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [],\n                        \"expression\": {\n                          \"argumentTypes\": [],\n                          \"id\": 122,\n                          \"name\": \"isOwner\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 140,\n                          \"src\": \"1018:7:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_view$__$returns$_t_bool_$\",\n                            \"typeString\": \"function () view returns (bool)\"\n                          }\n                        },\n                        \"id\": 123,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1018:9:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572\",\n                        \"id\": 124,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1029:34:2\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe\",\n                          \"typeString\": \"literal_string \\\"Ownable: caller is not the owner\\\"\"\n                        },\n                        \"value\": \"Ownable: caller is not the owner\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe\",\n                          \"typeString\": \"literal_string \\\"Ownable: caller is not the owner\\\"\"\n                        }\n                      ],\n                      \"id\": 121,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        214,\n                        215\n                      ],\n                      \"referencedDeclaration\": 215,\n                      \"src\": \"1010:7:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 125,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1010:54:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 126,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1010:54:2\"\n                },\n                {\n                  \"id\": 127,\n                  \"nodeType\": \"PlaceholderStatement\",\n                  \"src\": \"1074:1:2\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Throws if called by any account other than the owner.\",\n            \"id\": 129,\n            \"name\": \"onlyOwner\",\n            \"nodeType\": \"ModifierDefinition\",\n            \"parameters\": {\n              \"id\": 120,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"997:2:2\"\n            },\n            \"src\": \"979:103:2\",\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 139,\n              \"nodeType\": \"Block\",\n              \"src\": \"1211:44:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 137,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 134,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 211,\n                        \"src\": \"1228:3:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 135,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"1228:10:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 136,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 89,\n                      \"src\": \"1242:6:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"1228:20:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"functionReturnParameters\": 133,\n                  \"id\": 138,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1221:27:2\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Returns true if the caller is the current owner.\",\n            \"id\": 140,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"isOwner\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 130,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1181:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 133,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 132,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 140,\n                  \"src\": \"1205:4:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bool\",\n                    \"typeString\": \"bool\"\n                  },\n                  \"typeName\": {\n                    \"id\": 131,\n                    \"name\": \"bool\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1205:4:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1204:6:2\"\n            },\n            \"scope\": 196,\n            \"src\": \"1165:90:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 158,\n              \"nodeType\": \"Block\",\n              \"src\": \"1645:91:2\",\n              \"statements\": [\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 146,\n                        \"name\": \"_owner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 89,\n                        \"src\": \"1681:6:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 148,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"1697:1:2\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            }\n                          ],\n                          \"id\": 147,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"1689:7:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": \"address\"\n                        },\n                        \"id\": 149,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1689:10:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      ],\n                      \"id\": 145,\n                      \"name\": \"OwnershipTransferred\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 95,\n                      \"src\": \"1660:20:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 150,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1660:40:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 151,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"1655:45:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 156,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 152,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 89,\n                      \"src\": \"1710:6:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 154,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"1727:1:2\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 153,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"1719:7:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": \"address\"\n                      },\n                      \"id\": 155,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1719:10:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"1710:19:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 157,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1710:19:2\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Leaves the contract without owner. It will not be possible to call\\n`onlyOwner` functions anymore. Can only be called by the current owner.\\n     * > Note: Renouncing ownership will leave the contract without an owner,\\nthereby removing any functionality that is only available to the owner.\",\n            \"id\": 159,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 143,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 142,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 129,\n                  \"src\": \"1635:9:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"1635:9:2\"\n              }\n            ],\n            \"name\": \"renounceOwnership\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 141,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1625:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 144,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1645:0:2\"\n            },\n            \"scope\": 196,\n            \"src\": \"1599:137:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 170,\n              \"nodeType\": \"Block\",\n              \"src\": \"1947:45:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 167,\n                        \"name\": \"newOwner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 161,\n                        \"src\": \"1976:8:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 166,\n                      \"name\": \"_transferOwnership\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 195,\n                      \"src\": \"1957:18:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address)\"\n                      }\n                    },\n                    \"id\": 168,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1957:28:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 169,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1957:28:2\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Transfers ownership of the contract to a new account (`newOwner`).\\nCan only be called by the current owner.\",\n            \"id\": 171,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 164,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 163,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 129,\n                  \"src\": \"1937:9:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"1937:9:2\"\n              }\n            ],\n            \"name\": \"transferOwnership\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 162,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 161,\n                  \"name\": \"newOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 171,\n                  \"src\": \"1912:16:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 160,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1912:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1911:18:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 165,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1947:0:2\"\n            },\n            \"scope\": 196,\n            \"src\": \"1885:107:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 194,\n              \"nodeType\": \"Block\",\n              \"src\": \"2148:170:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 181,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 177,\n                          \"name\": \"newOwner\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 173,\n                          \"src\": \"2166:8:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 179,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"2186:1:2\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 178,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"2178:7:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": \"address\"\n                          },\n                          \"id\": 180,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2178:10:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"2166:22:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373\",\n                        \"id\": 182,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2190:40:2\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe\",\n                          \"typeString\": \"literal_string \\\"Ownable: new owner is the zero address\\\"\"\n                        },\n                        \"value\": \"Ownable: new owner is the zero address\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe\",\n                          \"typeString\": \"literal_string \\\"Ownable: new owner is the zero address\\\"\"\n                        }\n                      ],\n                      \"id\": 176,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        214,\n                        215\n                      ],\n                      \"referencedDeclaration\": 215,\n                      \"src\": \"2158:7:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 183,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2158:73:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 184,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2158:73:2\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 186,\n                        \"name\": \"_owner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 89,\n                        \"src\": \"2267:6:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 187,\n                        \"name\": \"newOwner\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 173,\n                        \"src\": \"2275:8:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 185,\n                      \"name\": \"OwnershipTransferred\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 95,\n                      \"src\": \"2246:20:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 188,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2246:38:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 189,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"2241:43:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 192,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 190,\n                      \"name\": \"_owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 89,\n                      \"src\": \"2294:6:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 191,\n                      \"name\": \"newOwner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 173,\n                      \"src\": \"2303:8:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"2294:17:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 193,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2294:17:2\"\n                }\n              ]\n            },\n            \"documentation\": \"@dev Transfers ownership of the contract to a new account (`newOwner`).\",\n            \"id\": 195,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"_transferOwnership\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 174,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 173,\n                  \"name\": \"newOwner\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 195,\n                  \"src\": \"2121:16:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 172,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2121:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2120:18:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 175,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2148:0:2\"\n            },\n            \"scope\": 196,\n            \"src\": \"2093:225:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"internal\"\n          }\n        ],\n        \"scope\": 197,\n        \"src\": \"385:1935:2\"\n      }\n    ],\n    \"src\": \"0:2321:2\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.5.8+commit.23d335f2.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.0.11\",\n  \"updatedAt\": \"2019-08-18T20:45:06.084Z\",\n  \"devdoc\": {\n    \"details\": \"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. * This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be aplied to your functions to restrict their use to the owner.\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Initializes the contract setting the deployer as the initial owner.\"\n      },\n      \"isOwner()\": {\n        \"details\": \"Returns true if the caller is the current owner.\"\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    }\n  },\n  \"userdoc\": {\n    \"methods\": {}\n  }\n}"
  },
  {
    "path": "chapter-5/greeter/client/src/index.css",
    "content": "body {\n  margin: 0;\n  padding: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\",\n    \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n    sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n  font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n    monospace;\n}\n"
  },
  {
    "path": "chapter-5/greeter/client/src/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(<App />, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"
  },
  {
    "path": "chapter-5/greeter/client/src/serviceWorker.js",
    "content": "// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.1/8 is considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\nexport function register(config) {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit http://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl)\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister();\n    });\n  }\n}\n"
  },
  {
    "path": "chapter-5/greeter/client/src/utils/getWeb3.js",
    "content": "import Web3 from \"web3\";\n\nconst getWeb3 = () =>\n  new Promise((resolve, reject) => {\n    // Wait for loading completion to avoid race conditions with web3 injection timing.\n    window.addEventListener(\"load\", async () => {\n      // Modern dapp browsers...\n      if (window.ethereum) {\n        const web3 = new Web3(window.ethereum);\n        try {\n          // Request account access if needed\n          await window.ethereum.enable();\n          // Acccounts now exposed\n          resolve(web3);\n        } catch (error) {\n          reject(error);\n        }\n      }\n      // Legacy dapp browsers...\n      else if (window.web3) {\n        // Use Mist/MetaMask's provider.\n        const web3 = window.web3;\n        console.log(\"Injected web3 detected.\");\n        resolve(web3);\n      }\n      // Fallback to localhost; use dev console port by default...\n      else {\n        const provider = new Web3.providers.HttpProvider(\n          \"http://127.0.0.1:9545\"\n        );\n        const web3 = new Web3(provider);\n        console.log(\"No web3 instance injected, using Local web3.\");\n        resolve(web3);\n      }\n    });\n  });\n\nexport default getWeb3;\n"
  },
  {
    "path": "chapter-5/greeter/contracts/Greeter.sol",
    "content": "pragma solidity >= 0.4.0 < 0.7.0;\n\nimport \"openzeppelin-solidity/contracts/access/Ownable.sol\";\n\ncontract Greeter is Ownable {\n  string private _greeting = \"Hello, World!\";\n\n  function greet() external view returns(string memory) {\n    return _greeting;\n  }\n\n  function setGreeting(string calldata greeting) external onlyOwner {\n    _greeting = greeting;\n  }\n}\n"
  },
  {
    "path": "chapter-5/greeter/contracts/Migrations.sol",
    "content": "pragma solidity >=0.4.21 <0.7.0;\n\ncontract Migrations {\n  address public owner;\n  uint public last_completed_migration;\n\n  constructor() public {\n    owner = msg.sender;\n  }\n\n  modifier restricted() {\n    if (msg.sender == owner) _;\n  }\n\n  function setCompleted(uint completed) public restricted {\n    last_completed_migration = completed;\n  }\n\n  function upgrade(address new_address) public restricted {\n    Migrations upgraded = Migrations(new_address);\n    upgraded.setCompleted(last_completed_migration);\n  }\n}\n"
  },
  {
    "path": "chapter-5/greeter/migrations/1_initial_migration.js",
    "content": "const Migrations = artifacts.require(\"Migrations\");\n\nmodule.exports = function(deployer) {\n  deployer.deploy(Migrations);\n};\n"
  },
  {
    "path": "chapter-5/greeter/migrations/2_deploy_greeter.js",
    "content": "const GreeterContract = artifacts.require(\"Greeter\");\n\nmodule.exports = function(deployer) {\n  deployer.deploy(GreeterContract);\n}\n"
  },
  {
    "path": "chapter-5/greeter/package.json",
    "content": "{\n  \"dependencies\": {\n    \"openzeppelin-solidity\": \"^3.4.0\"\n  },\n  \"devDependencies\": {\n    \"truffle-hdwallet-provider\": \"^1.0.17\"\n  }\n}\n"
  },
  {
    "path": "chapter-5/greeter/test/greeter_test.js",
    "content": "const GreeterContract = artifacts.require(\"Greeter\");\n\ncontract(\"Greeter\", (accounts) => {\n  it(\"has been deployed successfully\", async () => {\n    const greeter = await GreeterContract.deployed();\n    assert(greeter, \"contract has been deployed\");\n  });\n\n  describe(\"greet()\", () => {\n    it(\"returns 'Hello, World!'\", async () => {\n      const greeter = await GreeterContract.deployed();\n      const expected = \"Hello, World!\";\n      const actual = await greeter.greet();\n\n      assert.equal(actual, expected, \"greeted with 'Hello, World!'\");\n    })\n  });\n\n  describe(\"owner()\", () => {\n    it(\"returns the address of the owner\", async () => {\n      const greeter = await GreeterContract.deployed();\n      const owner = await greeter.owner();\n      \n      assert(owner, \"the current owner\");\n    });\n\n    it(\"matches the address that originally deployed the contract\", async () => {\n      const greeter = await GreeterContract.deployed();\n      const owner = await greeter.owner();\n      const expected = accounts[0];\n      \n      assert.equal(owner, expected, \"matches address used to deploy contract\");\n    });\n  });\n});\n\ncontract(\"Greeter: update greeting\", (accounts) => {\n  describe(\"setGreeting(string)\", () => {\n    describe(\"when message is sent by the owner\", () => {\n      it(\"sets greeting to passed in string\", async () => {\n        const greeter = await GreeterContract.deployed()\n        const expected = \"The owner changed the message\";\n\n        await greeter.setGreeting(expected);\n        const actual = await greeter.greet();\n\n        assert.equal(actual, expected, \"greeting updated\");\n      });\n    });\n\n    describe(\"when message is sent by another account\", () => {\n      it(\"does not set the greeting\", async () => {\n        const greeter = await GreeterContract.deployed()\n        const expected = await greeter.greet();\n\n        try {\n          await greeter.setGreeting(\"Not the owner\", { from: accounts[1] });\n        } catch(err) {\n          const errorMessage = \"Ownable: caller is not the owner\"\n          assert.equal(err.reason, errorMessage, \"greeting should not update\");\n          return;\n        }\n        assert(false, \"greeting should not update\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "chapter-5/greeter/truffle-config.js",
    "content": "const HDWallterProvider = require(\"truffle-hdwallet-provider\");\n/**\n * Use this file to configure your truffle project. It's seeded with some\n * common settings for different networks and features like migrations,\n * compilation and testing. Uncomment the ones you need or modify\n * them to suit your project as necessary.\n *\n * More information about configuration can be found at:\n *\n * truffleframework.com/docs/advanced/configuration\n *\n * To deploy via Infura you'll need a wallet provider (like truffle-hdwallet-provider)\n * to sign your transactions before they're sent to a remote public node. Infura accounts\n * are available for free at: infura.io/register.\n *\n * You'll also need a mnemonic - the twelve word phrase the wallet uses to generate\n * public/private key pairs. If you're publishing your code to GitHub make sure you load this\n * phrase from a file you've .gitignored so it doesn't accidentally become public.\n *\n */\n\n// const HDWalletProvider = require('truffle-hdwallet-provider');\n// const infuraKey = \"fj4jll3k.....\";\n//\n// const fs = require('fs');\n// const mnemonic = fs.readFileSync(\".secret\").toString().trim();\n\nmodule.exports = {\n  contracts_build_directory: \"./client/src/contracts\",\n\n  /**\n   * Networks define how you connect to your ethereum client and let you set the\n   * defaults web3 uses to send transactions. If you don't specify one truffle\n   * will spin up a development blockchain for you on port 9545 when you\n   * run `develop` or `test`. You can ask a truffle command to use a specific\n   * network from the command line, e.g\n   *\n   * $ truffle test --network <network-name>\n   */\n\n  networks: {\n    // Useful for testing. The `development` name is special - truffle uses it by default\n    // if it's defined here and no other network is specified at the command line.\n    // You should run a client (like ganache-cli, geth or parity) in a separate terminal\n    // tab if you use this network and you must also set the `host`, `port` and `network_id`\n    // options below to some value.\n    //\n    development: {\n     host: \"127.0.0.1\",     // Localhost (default: none)\n     port: 7545,            // Standard Ethereum port (default: none)\n     network_id: \"*\",       // Any network (default: none)\n    },\n\n    goerli: {\n      provider: () => {\n        const mnemonic = process.env[\"MNEMONIC\"]\n        return new HDWallterProvider(mnemonic, \"http://127.0.0.1:8545\");\n      },\n      network_id: \"*\",\n    },\n\n    rinkeby: {\n      provider: () => {\n        const mnemonic = process.env[\"MNEMONIC\"]\n        const project_id = process.env[\"INFURA_PROJECT_ID\"]\n        return new HDWallterProvider(\n          mnemonic,\n          `https://rinkeby.infura.io/v3/${project_id}`\n        );\n      },\n      network_id: \"*\"\n    }\n\n    // Another network with more advanced options...\n    // advanced: {\n      // port: 8777,             // Custom port\n      // network_id: 1342,       // Custom network\n      // gas: 8500000,           // Gas sent with each transaction (default: ~6700000)\n      // gasPrice: 20000000000,  // 20 gwei (in wei) (default: 100 gwei)\n      // from: <address>,        // Account to send txs from (default: accounts[0])\n      // websockets: true        // Enable EventEmitter interface for web3 (default: false)\n    // },\n\n    // Useful for deploying to a public network.\n    // NB: It's important to wrap the provider as a function.\n    // ropsten: {\n      // provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/YOUR-PROJECT-ID`),\n      // network_id: 3,       // Ropsten's id\n      // gas: 5500000,        // Ropsten has a lower block limit than mainnet\n      // confirmations: 2,    // # of confs to wait between deployments. (default: 0)\n      // timeoutBlocks: 200,  // # of blocks before a deployment times out  (minimum/default: 50)\n      // skipDryRun: true     // Skip dry run before migrations? (default: false for public nets )\n    // },\n\n    // Useful for private networks\n    // private: {\n      // provider: () => new HDWalletProvider(mnemonic, `https://network.io`),\n      // network_id: 2111,   // This network is yours, in the cloud.\n      // production: true    // Treats this network as if it was a public net. (default: false)\n    // }\n  },\n\n  // Set default mocha options here, use special reporters etc.\n  mocha: {\n    // timeout: 100000\n  },\n\n  // Configure your compilers\n  compilers: {\n    solc: {\n      version: \"0.6\",         // Fetch exact version from solc-bin (default: truffle's version)\n      // docker: true,        // Use \"0.5.1\" you've installed locally with docker (default: false)\n      // settings: {          // See the solidity docs for advice about optimization and evmVersion\n      //  optimizer: {\n      //    enabled: false,\n      //    runs: 200\n      //  },\n      //  evmVersion: \"byzantium\"\n      // }\n    }\n  }\n}\n"
  },
  {
    "path": "chapter-6/fundraiser/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2018 Truffle\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "chapter-6/fundraiser/client/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/build\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "chapter-6/fundraiser/client/README.md",
    "content": "This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).\n\n## Available Scripts\n\nIn the project directory, you can run:\n\n### `npm start`\n\nRuns the app in the development mode.<br>\nOpen [http://localhost:3000](http://localhost:3000) to view it in the browser.\n\nThe page will reload if you make edits.<br>\nYou will also see any lint errors in the console.\n\n### `npm test`\n\nLaunches the test runner in the interactive watch mode.<br>\nSee the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.\n\n### `npm run build`\n\nBuilds the app for production to the `build` folder.<br>\nIt correctly bundles React in production mode and optimizes the build for the best performance.\n\nThe build is minified and the filenames include the hashes.<br>\nYour app is ready to be deployed!\n\nSee the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.\n\n### `npm run eject`\n\n**Note: this is a one-way operation. Once you `eject`, you can’t go back!**\n\nIf you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.\n\nInstead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.\n\nYou don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.\n\n## Learn More\n\nYou can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).\n\nTo learn React, check out the [React documentation](https://reactjs.org/).\n"
  },
  {
    "path": "chapter-6/fundraiser/client/package.json",
    "content": "{\n  \"name\": \"client\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"react\": \"^16.6.3\",\n    \"react-dom\": \"^16.6.3\",\n    \"react-scripts\": \"2.1.1\",\n    \"web3\": \"^1.0.0-beta.37\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\"\n  },\n  \"eslintConfig\": {\n    \"extends\": \"react-app\"\n  },\n  \"browserslist\": [\n    \">0.2%\",\n    \"not dead\",\n    \"not ie <= 11\",\n    \"not op_mini all\"\n  ]\n}\n"
  },
  {
    "path": "chapter-6/fundraiser/client/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <link rel=\"shortcut icon\" href=\"%PUBLIC_URL%/favicon.ico\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <meta name=\"theme-color\" content=\"#000000\">\n    <!--\n      manifest.json provides metadata used when your web app is added to the\n      homescreen on Android. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\">\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>React App</title>\n  </head>\n  <body>\n    <noscript>\n      You need to enable JavaScript to run this app.\n    </noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "chapter-6/fundraiser/client/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "chapter-6/fundraiser/client/src/App.css",
    "content": ".App {\n  text-align: center;\n}\n\n.App-logo {\n  animation: App-logo-spin infinite 20s linear;\n  height: 40vmin;\n}\n\n.App-header {\n  background-color: #282c34;\n  min-height: 100vh;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  font-size: calc(10px + 2vmin);\n  color: white;\n}\n\n.App-link {\n  color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n"
  },
  {
    "path": "chapter-6/fundraiser/client/src/App.js",
    "content": "import React, { Component } from \"react\";\nimport SimpleStorageContract from \"./contracts/SimpleStorage.json\";\nimport getWeb3 from \"./utils/getWeb3\";\n\nimport \"./App.css\";\n\nclass App extends Component {\n  state = { storageValue: 0, web3: null, accounts: null, contract: null };\n\n  componentDidMount = async () => {\n    try {\n      // Get network provider and web3 instance.\n      const web3 = await getWeb3();\n\n      // Use web3 to get the user's accounts.\n      const accounts = await web3.eth.getAccounts();\n\n      // Get the contract instance.\n      const networkId = await web3.eth.net.getId();\n      const deployedNetwork = SimpleStorageContract.networks[networkId];\n      const instance = new web3.eth.Contract(\n        SimpleStorageContract.abi,\n        deployedNetwork && deployedNetwork.address,\n      );\n\n      // Set web3, accounts, and contract to the state, and then proceed with an\n      // example of interacting with the contract's methods.\n      this.setState({ web3, accounts, contract: instance }, this.runExample);\n    } catch (error) {\n      // Catch any errors for any of the above operations.\n      alert(\n        `Failed to load web3, accounts, or contract. Check console for details.`,\n      );\n      console.error(error);\n    }\n  };\n\n  runExample = async () => {\n    const { accounts, contract } = this.state;\n\n    // Stores a given value, 5 by default.\n    await contract.methods.set(5).send({ from: accounts[0] });\n\n    // Get the value from the contract to prove it worked.\n    const response = await contract.methods.get().call();\n\n    // Update state with the result.\n    this.setState({ storageValue: response });\n  };\n\n  render() {\n    if (!this.state.web3) {\n      return <div>Loading Web3, accounts, and contract...</div>;\n    }\n    return (\n      <div className=\"App\">\n        <h1>Good to Go!</h1>\n        <p>Your Truffle Box is installed and ready.</p>\n        <h2>Smart Contract Example</h2>\n        <p>\n          If your contracts compiled and migrated successfully, below will show\n          a stored value of 5 (by default).\n        </p>\n        <p>\n          Try changing the value stored on <strong>line 40</strong> of App.js.\n        </p>\n        <div>The stored value is: {this.state.storageValue}</div>\n      </div>\n    );\n  }\n}\n\nexport default App;\n"
  },
  {
    "path": "chapter-6/fundraiser/client/src/App.test.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nit('renders without crashing', () => {\n  const div = document.createElement('div');\n  ReactDOM.render(<App />, div);\n  ReactDOM.unmountComponentAtNode(div);\n});\n"
  },
  {
    "path": "chapter-6/fundraiser/client/src/index.css",
    "content": "body {\n  margin: 0;\n  padding: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\",\n    \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n    sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n  font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n    monospace;\n}\n"
  },
  {
    "path": "chapter-6/fundraiser/client/src/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(<App />, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"
  },
  {
    "path": "chapter-6/fundraiser/client/src/serviceWorker.js",
    "content": "// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.1/8 is considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\nexport function register(config) {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit http://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl)\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister();\n    });\n  }\n}\n"
  },
  {
    "path": "chapter-6/fundraiser/client/src/utils/getWeb3.js",
    "content": "import Web3 from \"web3\";\n\nconst getWeb3 = () =>\n  new Promise((resolve, reject) => {\n    // Wait for loading completion to avoid race conditions with web3 injection timing.\n    window.addEventListener(\"load\", async () => {\n      // Modern dapp browsers...\n      if (window.ethereum) {\n        const web3 = new Web3(window.ethereum);\n        try {\n          // Request account access if needed\n          await window.ethereum.enable();\n          // Acccounts now exposed\n          resolve(web3);\n        } catch (error) {\n          reject(error);\n        }\n      }\n      // Legacy dapp browsers...\n      else if (window.web3) {\n        // Use Mist/MetaMask's provider.\n        const web3 = window.web3;\n        console.log(\"Injected web3 detected.\");\n        resolve(web3);\n      }\n      // Fallback to localhost; use dev console port by default...\n      else {\n        const provider = new Web3.providers.HttpProvider(\n          \"http://127.0.0.1:8545\"\n        );\n        const web3 = new Web3(provider);\n        console.log(\"No web3 instance injected, using Local web3.\");\n        resolve(web3);\n      }\n    });\n  });\n\nexport default getWeb3;\n"
  },
  {
    "path": "chapter-6/fundraiser/contracts/Fundraiser.sol",
    "content": "pragma solidity >0.4.23 <0.7.0;\n\nimport \"openzeppelin-solidity/contracts/ownership/Ownable.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\n\ncontract Fundraiser is Ownable {\n    using SafeMath for uint256;\n\n    struct Donation {\n        uint256 value;\n        uint256 date;\n    }\n    mapping(address => Donation[]) private _donations;\n\n    event DonationReceived(address indexed donor, uint256 value);\n    event Withdraw(uint256 amount);\n\n    string public name;\n    string public url;\n    string public imageURL;\n    string public description;\n\n    address payable public beneficiary;\n    address private _owner;\n\n    uint256 public totalDonations;\n    uint256 public donationsCount;\n\n    constructor(\n        string memory _name,\n        string memory _url,\n        string memory _imageURL,\n        string memory _description,\n        address payable _beneficiary,\n        address _custodian\n    )\n        public\n    {\n        name = _name;\n        url = _url;\n        imageURL = _imageURL;\n        description = _description;\n        beneficiary = _beneficiary;\n        _owner = _custodian;\n    }\n\n    function setBeneficiary(address payable _beneficiary) public onlyOwner {\n        beneficiary = _beneficiary;\n    }\n\n    function myDonationsCount() public view returns(uint256) {\n        return _donations[msg.sender].length;\n    }\n\n    function donate() public payable {\n        Donation memory donation = Donation({\n            value: msg.value,\n            date: block.timestamp\n        });\n        _donations[msg.sender].push(donation);\n        totalDonations = totalDonations.add(msg.value);\n        donationsCount++;\n\n        emit DonationReceived(msg.sender, msg.value);\n    }\n\n    function myDonations() public view returns(\n        uint256[] memory values,\n        uint256[] memory dates\n    )\n    {\n        uint256 count = myDonationsCount();\n        values = new uint256[](count);\n        dates = new uint256[](count);\n\n        for (uint256 i = 0; i < count; i++) {\n            Donation storage donation = _donations[msg.sender][i];\n            values[i] = donation.value;\n            dates[i] = donation.date;\n        }\n\n        return (values, dates);\n    }\n\n    function withdraw() public onlyOwner {\n        uint256 balance = address(this).balance;\n        beneficiary.transfer(balance);\n        emit Withdraw(balance);\n    }\n\n    function () external payable {\n        totalDonations = totalDonations.add(msg.value);\n        donationsCount++;\n    }\n}\n"
  },
  {
    "path": "chapter-6/fundraiser/contracts/Migrations.sol",
    "content": "pragma solidity ^0.5.0;\n\ncontract Migrations {\n  address public owner;\n  uint public last_completed_migration;\n\n  modifier restricted() {\n    if (msg.sender == owner) _;\n  }\n\n  constructor() public {\n    owner = msg.sender;\n  }\n\n  function setCompleted(uint completed) public restricted {\n    last_completed_migration = completed;\n  }\n\n  function upgrade(address new_address) public restricted {\n    Migrations upgraded = Migrations(new_address);\n    upgraded.setCompleted(last_completed_migration);\n  }\n}\n"
  },
  {
    "path": "chapter-6/fundraiser/migrations/1_initial_migration.js",
    "content": "var Migrations = artifacts.require(\"./Migrations.sol\");\n\nmodule.exports = function(deployer) {\n  deployer.deploy(Migrations);\n};\n"
  },
  {
    "path": "chapter-6/fundraiser/test/fundraiser_test.js",
    "content": "const FundraiserContract = artifacts.require(\"Fundraiser\");\n\ncontract(\"Fundraiser\", accounts => {\n  let fundraiser;\n  const name =  \"Beneficiary Name\";\n  const url = \"beneficiaryname.org\";\n  const imageURL = \"https://placekitten.com/600/350\";\n  const description = \"Beneficiary description\";\n  const beneficiary = accounts[1];\n  const owner = accounts[0];\n\n  beforeEach(async () => {\n    fundraiser = await FundraiserContract.new(\n      name,\n      url,\n      imageURL,\n      description,\n      beneficiary,\n      owner \n    )\n  });\n\n  describe(\"initialization\", () => {\n    it(\"gets the beneficiary name\", async () => {\n      const actual = await fundraiser.name();\n      assert.equal(actual, name, \"names should match\");\n    });\n\n    it(\"gets the beneficiary url\", async () => {\n      const actual = await fundraiser.url();\n      assert.equal(actual, url, \"url should match\");\n    });\n\n    it(\"gets the beneficiary image url\", async () => {\n      const actual = await fundraiser.imageURL();\n      assert.equal(actual, imageURL, \"imageURL should match\");\n    });\n\n    it(\"gets the beneficiary description\", async () => {\n      const actual = await fundraiser.description();\n      assert.equal(actual, description, \"description should match\");\n    });\n\n    it(\"gets the beneficiary\", async () => {\n      const actual = await fundraiser.beneficiary();\n      assert.equal(actual, beneficiary, \"beneficiary addresses should match\");\n    });\n\n    it(\"gets the owner\", async () => {\n      const actual = await fundraiser.owner();\n      assert.equal(actual, owner, \"bios should match\");\n    });\n  });\n\n  describe(\"setBeneficiary\", () => {\n    const newBeneficiary = accounts[2];\n\n    it(\"updated beneficiary when called by owner account\", async () => {\n      await fundraiser.setBeneficiary(newBeneficiary, {from: owner});\n      const actualBeneficiary = await fundraiser.beneficiary();\n      assert.equal(actualBeneficiary, newBeneficiary, \"beneficiaries should match\");\n    });\n\n    it(\"throws and error when called from a non-owner account\", async () => {\n      try {\n        await fundraiser.setBeneficiary(newBeneficiary, {from: accounts[3]});\n        assert.fail(\"withdraw was not restricted to owners\")\n      } catch(err) {\n        const expectedError = \"Ownable: caller is not the owner\"\n        const actualError = err.reason;\n        assert.equal(actualError, expectedError, \"should not be permitted\")\n      }\n    });\n  });\n\n  describe(\"making donations\", () => {\n    const value = web3.utils.toWei('0.0289');\n    const donor = accounts[2];\n\n    it(\"increases myDonationsCount\", async () => {\n      const currentDonationsCount = await fundraiser.myDonationsCount(\n        {from: donor}\n      );\n      await fundraiser.donate({from: donor, value});\n      const newDonationsCount = await fundraiser.myDonationsCount({from: donor});\n    \n      assert.equal(\n        1,\n        newDonationsCount - currentDonationsCount,\n        \"myDonationsCount should increment by 1\");\n    });\n\n    it(\"includes donation in myDonations\", async () => {\n      await fundraiser.donate({from: donor, value});\n      const {values, dates} = await fundraiser.myDonations(\n        {from: donor}\n      );\n    \n      assert.equal(\n        value,\n        values[0],\n        \"values should match\"\n      );\n      assert(dates[0], \"date should be present\");\n    });\n\n    it(\"increases the totalDonations amount\", async () => {\n      const currentTotalDonations = await fundraiser.totalDonations();\n      await fundraiser.donate({from: donor, value});\n      const newTotalDonations = await fundraiser.totalDonations();\n    \n      const diff = newTotalDonations - currentTotalDonations;\n    \n      assert.equal(\n        diff,\n        value,\n        \"difference should match the donation value\"\n      )\n    });\n\n    it(\"increases donationsCount\", async () => {\n      const currentDonationsCount = await fundraiser.donationsCount();\n      await fundraiser.donate({from: donor, value});\n      const newDonationsCount = await fundraiser.donationsCount();\n    \n      assert.equal(\n        1,\n        newDonationsCount - currentDonationsCount,\n        \"donationsCount should increment by 1\");\n    });\n\n    it(\"emits the DonationReceived event\", async () => {\n      const tx = await fundraiser.donate({from: donor, value});\n      const expectedEvent = \"DonationReceived\";\n      const actualEvent = tx.logs[0].event;\n    \n      assert.equal(actualEvent, expectedEvent, \"events should match\");\n    });\n  });\n\n  describe(\"withdrawing funds\", () => {\n    beforeEach(async () => {\n      await fundraiser.donate(\n        {from: accounts[2], value: web3.utils.toWei('0.1')}\n      );\n    });\n\n    describe(\"access controls\", () => {\n      it(\"throws and error when called from a non-owner account\", async () => {\n        try {\n          await fundraiser.withdraw({from: accounts[3]});\n          assert.fail(\"withdraw was not restricted to owners\")\n        } catch(err) {\n          const expectedError = \"Ownable: caller is not the owner\"\n          const actualError = err.reason;\n          assert.equal(actualError, expectedError, \"should not be permitted\")\n        }\n      });\n\n      it(\"permits the owner to call the function\", async () => {\n        try {\n          await fundraiser.withdraw({from: owner});\n          assert(true, \"no errors were thrown\");\n        } catch(err) {\n          assert.fail(\"should not have thrown an error\");\n        }\n      });\n    });\n\n    it(\"transfers balance to beneficiary\", async () => {\n      const currentContractBalance = await web3.eth.getBalance(fundraiser.address);\n      const currentBeneficiaryBalance = await web3.eth.getBalance(beneficiary);\n    \n      await fundraiser.withdraw({from: owner});\n    \n      const newContractBalance = await web3.eth.getBalance(fundraiser.address);\n      const newBeneficiaryBalance = await web3.eth.getBalance(beneficiary);\n      const beneficiaryDifference = newBeneficiaryBalance - currentBeneficiaryBalance;\n    \n      assert.equal(\n        newContractBalance,\n        0,\n        \"contract should have a 0 balance\"\n      );\n      assert.equal(\n        beneficiaryDifference,\n        currentContractBalance,\n        \"beneficiary should receive all the funds\"\n      );\n    });\n\n    it(\"emits Withdraw event\", async () => {\n      const tx = await fundraiser.withdraw({from: owner});\n      const expectedEvent = \"Withdraw\";\n      const actualEvent = tx.logs[0].event;\n    \n      assert.equal(\n        actualEvent,\n        expectedEvent,\n        \"events should match\"\n      );\n    });\n  });\n\n  describe(\"fallback function\", () => {\n    const value = web3.utils.toWei('0.0289');\n\n    it(\"increases the totalDonations amount\", async () => {\n      const currentTotalDonations = await fundraiser.totalDonations();\n      await web3.eth.sendTransaction(\n        {to: fundraiser.address, from: accounts[9], value}\n      );\n      const newTotalDonations = await fundraiser.totalDonations();\n    \n      const diff = newTotalDonations - currentTotalDonations;\n    \n      assert.equal(\n        diff,\n        value,\n        \"difference should match the donation value\"\n      )\n    });\n\n    it(\"increases donationsCount\", async () => {\n      const currentDonationsCount = await fundraiser.donationsCount();\n      await web3.eth.sendTransaction(\n        {to: fundraiser.address, from: accounts[9], value}\n      );\n      const newDonationsCount = await fundraiser.donationsCount();\n    \n      assert.equal(\n        1,\n        newDonationsCount - currentDonationsCount,\n        \"donationsCount should increment by 1\");\n    });\n  });\n});;\n"
  },
  {
    "path": "chapter-6/fundraiser/truffle-config.js",
    "content": "const path = require(\"path\");\n\nmodule.exports = {\n  // See <http://truffleframework.com/docs/advanced/configuration>\n  // to customize your Truffle configuration!\n  contracts_build_directory: path.join(__dirname, \"client/src/contracts\"),\n  networks: {\n    develop: {\n      port: 8545\n    }\n  }\n};\n"
  },
  {
    "path": "chapter-7/fundraiser/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2018 Truffle\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "chapter-7/fundraiser/client/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/build\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "chapter-7/fundraiser/client/README.md",
    "content": "This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).\n\n## Available Scripts\n\nIn the project directory, you can run:\n\n### `npm start`\n\nRuns the app in the development mode.<br>\nOpen [http://localhost:3000](http://localhost:3000) to view it in the browser.\n\nThe page will reload if you make edits.<br>\nYou will also see any lint errors in the console.\n\n### `npm test`\n\nLaunches the test runner in the interactive watch mode.<br>\nSee the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.\n\n### `npm run build`\n\nBuilds the app for production to the `build` folder.<br>\nIt correctly bundles React in production mode and optimizes the build for the best performance.\n\nThe build is minified and the filenames include the hashes.<br>\nYour app is ready to be deployed!\n\nSee the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.\n\n### `npm run eject`\n\n**Note: this is a one-way operation. Once you `eject`, you can’t go back!**\n\nIf you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.\n\nInstead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.\n\nYou don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.\n\n## Learn More\n\nYou can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).\n\nTo learn React, check out the [React documentation](https://reactjs.org/).\n"
  },
  {
    "path": "chapter-7/fundraiser/client/package.json",
    "content": "{\n  \"name\": \"client\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"react\": \"^16.6.3\",\n    \"react-dom\": \"^16.6.3\",\n    \"react-scripts\": \"2.1.1\",\n    \"web3\": \"^1.0.0-beta.37\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\"\n  },\n  \"eslintConfig\": {\n    \"extends\": \"react-app\"\n  },\n  \"browserslist\": [\n    \">0.2%\",\n    \"not dead\",\n    \"not ie <= 11\",\n    \"not op_mini all\"\n  ]\n}\n"
  },
  {
    "path": "chapter-7/fundraiser/client/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <link rel=\"shortcut icon\" href=\"%PUBLIC_URL%/favicon.ico\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <meta name=\"theme-color\" content=\"#000000\">\n    <!--\n      manifest.json provides metadata used when your web app is added to the\n      homescreen on Android. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\">\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>React App</title>\n  </head>\n  <body>\n    <noscript>\n      You need to enable JavaScript to run this app.\n    </noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "chapter-7/fundraiser/client/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "chapter-7/fundraiser/client/src/App.css",
    "content": ".App {\n  text-align: center;\n}\n\n.App-logo {\n  animation: App-logo-spin infinite 20s linear;\n  height: 40vmin;\n}\n\n.App-header {\n  background-color: #282c34;\n  min-height: 100vh;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  font-size: calc(10px + 2vmin);\n  color: white;\n}\n\n.App-link {\n  color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n"
  },
  {
    "path": "chapter-7/fundraiser/client/src/App.js",
    "content": "import React, { Component } from \"react\";\nimport SimpleStorageContract from \"./contracts/SimpleStorage.json\";\nimport getWeb3 from \"./utils/getWeb3\";\n\nimport \"./App.css\";\n\nclass App extends Component {\n  state = { storageValue: 0, web3: null, accounts: null, contract: null };\n\n  componentDidMount = async () => {\n    try {\n      // Get network provider and web3 instance.\n      const web3 = await getWeb3();\n\n      // Use web3 to get the user's accounts.\n      const accounts = await web3.eth.getAccounts();\n\n      // Get the contract instance.\n      const networkId = await web3.eth.net.getId();\n      const deployedNetwork = SimpleStorageContract.networks[networkId];\n      const instance = new web3.eth.Contract(\n        SimpleStorageContract.abi,\n        deployedNetwork && deployedNetwork.address,\n      );\n\n      // Set web3, accounts, and contract to the state, and then proceed with an\n      // example of interacting with the contract's methods.\n      this.setState({ web3, accounts, contract: instance }, this.runExample);\n    } catch (error) {\n      // Catch any errors for any of the above operations.\n      alert(\n        `Failed to load web3, accounts, or contract. Check console for details.`,\n      );\n      console.error(error);\n    }\n  };\n\n  runExample = async () => {\n    const { accounts, contract } = this.state;\n\n    // Stores a given value, 5 by default.\n    await contract.methods.set(5).send({ from: accounts[0] });\n\n    // Get the value from the contract to prove it worked.\n    const response = await contract.methods.get().call();\n\n    // Update state with the result.\n    this.setState({ storageValue: response });\n  };\n\n  render() {\n    if (!this.state.web3) {\n      return <div>Loading Web3, accounts, and contract...</div>;\n    }\n    return (\n      <div className=\"App\">\n        <h1>Good to Go!</h1>\n        <p>Your Truffle Box is installed and ready.</p>\n        <h2>Smart Contract Example</h2>\n        <p>\n          If your contracts compiled and migrated successfully, below will show\n          a stored value of 5 (by default).\n        </p>\n        <p>\n          Try changing the value stored on <strong>line 40</strong> of App.js.\n        </p>\n        <div>The stored value is: {this.state.storageValue}</div>\n      </div>\n    );\n  }\n}\n\nexport default App;\n"
  },
  {
    "path": "chapter-7/fundraiser/client/src/App.test.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nit('renders without crashing', () => {\n  const div = document.createElement('div');\n  ReactDOM.render(<App />, div);\n  ReactDOM.unmountComponentAtNode(div);\n});\n"
  },
  {
    "path": "chapter-7/fundraiser/client/src/index.css",
    "content": "body {\n  margin: 0;\n  padding: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\",\n    \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n    sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n  font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n    monospace;\n}\n"
  },
  {
    "path": "chapter-7/fundraiser/client/src/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(<App />, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"
  },
  {
    "path": "chapter-7/fundraiser/client/src/serviceWorker.js",
    "content": "// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.1/8 is considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\nexport function register(config) {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit http://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl)\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister();\n    });\n  }\n}\n"
  },
  {
    "path": "chapter-7/fundraiser/client/src/utils/getWeb3.js",
    "content": "import Web3 from \"web3\";\n\nconst getWeb3 = () =>\n  new Promise((resolve, reject) => {\n    // Wait for loading completion to avoid race conditions with web3 injection timing.\n    window.addEventListener(\"load\", async () => {\n      // Modern dapp browsers...\n      if (window.ethereum) {\n        const web3 = new Web3(window.ethereum);\n        try {\n          // Request account access if needed\n          await window.ethereum.enable();\n          // Acccounts now exposed\n          resolve(web3);\n        } catch (error) {\n          reject(error);\n        }\n      }\n      // Legacy dapp browsers...\n      else if (window.web3) {\n        // Use Mist/MetaMask's provider.\n        const web3 = window.web3;\n        console.log(\"Injected web3 detected.\");\n        resolve(web3);\n      }\n      // Fallback to localhost; use dev console port by default...\n      else {\n        const provider = new Web3.providers.HttpProvider(\n          \"http://127.0.0.1:8545\"\n        );\n        const web3 = new Web3(provider);\n        console.log(\"No web3 instance injected, using Local web3.\");\n        resolve(web3);\n      }\n    });\n  });\n\nexport default getWeb3;\n"
  },
  {
    "path": "chapter-7/fundraiser/contracts/Fundraiser.sol",
    "content": "pragma solidity >0.4.23 <0.7.0;\n\nimport \"openzeppelin-solidity/contracts/ownership/Ownable.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\n\ncontract Fundraiser is Ownable {\n    using SafeMath for uint256;\n\n    struct Donation {\n        uint256 value;\n        uint256 date;\n    }\n    mapping(address => Donation[]) private _donations;\n\n    event DonationReceived(address indexed donor, uint256 value);\n    event Withdraw(uint256 amount);\n\n    string public name;\n    string public url;\n    string public imageURL;\n    string public description;\n\n    address payable public beneficiary;\n\n    uint256 public totalDonations;\n    uint256 public donationsCount;\n\n    constructor(\n        string memory _name,\n        string memory _url,\n        string memory _imageURL,\n        string memory _description,\n        address payable _beneficiary,\n        address _custodian\n    )\n        public\n    {\n        name = _name;\n        url = _url;\n        imageURL = _imageURL;\n        description = _description;\n        beneficiary = _beneficiary;\n        _transferOwnership(_custodian);\n    }\n\n    function setBeneficiary(address payable _beneficiary) public onlyOwner {\n        beneficiary = _beneficiary;\n    }\n\n    function myDonationsCount() public view returns(uint256) {\n        return _donations[msg.sender].length;\n    }\n\n    function donate() public payable {\n        Donation memory donation = Donation({\n            value: msg.value,\n            date: block.timestamp\n        });\n        _donations[msg.sender].push(donation);\n        totalDonations = totalDonations.add(msg.value);\n        donationsCount++;\n\n        emit DonationReceived(msg.sender, msg.value);\n    }\n\n    function myDonations() public view returns(\n        uint256[] memory values,\n        uint256[] memory dates\n    )\n    {\n        uint256 count = myDonationsCount();\n        values = new uint256[](count);\n        dates = new uint256[](count);\n\n        for (uint256 i = 0; i < count; i++) {\n            Donation storage donation = _donations[msg.sender][i];\n            values[i] = donation.value;\n            dates[i] = donation.date;\n        }\n\n        return (values, dates);\n    }\n\n    function withdraw() public onlyOwner {\n        uint256 balance = address(this).balance;\n        beneficiary.transfer(balance);\n        emit Withdraw(balance);\n    }\n\n    function () external payable {\n        totalDonations = totalDonations.add(msg.value);\n        donationsCount++;\n    }\n}\n"
  },
  {
    "path": "chapter-7/fundraiser/contracts/FundraiserFactory.sol",
    "content": "pragma solidity >0.4.23 <0.7.0;\n\nimport \"./Fundraiser.sol\";\n\ncontract FundraiserFactory {\n   uint256 constant maxLimit = 20;\n   Fundraiser[] private _fundraisers;\n\n   event FundraiserCreated(Fundraiser indexed fundraiser, address indexed owner);\n\n    function createFundraiser(\n        string memory name,\n        string memory url,\n        string memory imageURL,\n        string memory description,\n        address payable beneficiary\n    )\n        public\n    {\n        Fundraiser fundraiser = new Fundraiser(\n            name,\n            url,\n            imageURL,\n            description,\n            beneficiary,\n            msg.sender\n        );\n        _fundraisers.push(fundraiser);\n        emit FundraiserCreated(fundraiser, msg.sender);\n    }\n\n    function fundraisersCount() public view returns(uint256) {\n        return _fundraisers.length;\n    }\n\n    function fundraisers(uint256 limit, uint256 offset)\n        public\n        view\n        returns(Fundraiser[] memory coll)\n    {\n        require(offset <= fundraisersCount(), \"offset out of bounds\");\n\n        uint256 size = fundraisersCount() - offset;\n        size = size < limit ? size : limit;\n        size = size < maxLimit ? size : maxLimit;\n        coll = new Fundraiser[](size);\n\n        for(uint256 i = 0; i < size; i++) {\n            coll[i] = _fundraisers[offset + i];\n        }\n\n        return coll;\n    }\n}\n"
  },
  {
    "path": "chapter-7/fundraiser/contracts/Migrations.sol",
    "content": "pragma solidity ^0.5.0;\n\ncontract Migrations {\n  address public owner;\n  uint public last_completed_migration;\n\n  modifier restricted() {\n    if (msg.sender == owner) _;\n  }\n\n  constructor() public {\n    owner = msg.sender;\n  }\n\n  function setCompleted(uint completed) public restricted {\n    last_completed_migration = completed;\n  }\n\n  function upgrade(address new_address) public restricted {\n    Migrations upgraded = Migrations(new_address);\n    upgraded.setCompleted(last_completed_migration);\n  }\n}\n"
  },
  {
    "path": "chapter-7/fundraiser/migrations/1_initial_migration.js",
    "content": "var Migrations = artifacts.require(\"./Migrations.sol\");\n\nmodule.exports = function(deployer) {\n  deployer.deploy(Migrations);\n};\n"
  },
  {
    "path": "chapter-7/fundraiser/migrations/2_deploy_fundraiser_factory.js",
    "content": "const FundraiserFactoryContract = artifacts.require(\"FundraiserFactory\");\n\nmodule.exports = function(deployer) {\n  deployer.deploy(FundraiserFactoryContract);\n}\n"
  },
  {
    "path": "chapter-7/fundraiser/test/fundraiser_factory_test.js",
    "content": "const FundraiserFactoryContract = artifacts.require(\"FundraiserFactory\");\nconst FundraiserContract = artifacts.require(\"Fundraiser\");\n\ncontract(\"FundraiserFactory: deployment\", () => {\n  it(\"has been deployed\", async () => {\n    const fundraiserFactory = FundraiserFactoryContract.deployed();\n    assert(fundraiserFactory, \"fundraiser factory was not deployed\");\n  });\n});\n\ncontract(\"FundraiserFactory: createFundraiser\", (accounts) => {\n  let fundraiserFactory;\n  // fundraiser args\n  const name =  \"Beneficiary Name\";\n  const url = \"beneficiaryname.org\";\n  const imageURL = \"https://placekitten.com/600/350\"\n  const description = \"Beneficiary Description\"\n  const beneficiary = accounts[1];\n\n  it(\"increments the fundraisersCount\", async () => {\n    fundraiserFactory = await FundraiserFactoryContract.deployed();\n    const currentFundraisersCount = await fundraiserFactory.fundraisersCount();\n    await fundraiserFactory.createFundraiser(\n      name,\n      url,\n      imageURL,\n      description,\n      beneficiary\n    );\n    const newFundraisersCount = await fundraiserFactory.fundraisersCount();\n\n    assert.equal(\n      newFundraisersCount - currentFundraisersCount,\n      1,\n      \"should increment by 1\"\n    )\n  });\n\n  it(\"emits the FundraiserCreated event\", async () => {\n    fundraiserFactory = await FundraiserFactoryContract.deployed();\n    const tx = await fundraiserFactory.createFundraiser(\n      name,\n      url,\n      imageURL,\n      description,\n      beneficiary\n    );\n    const expectedEvent = \"FundraiserCreated\";\n    const actualEvent = tx.logs[0].event;\n  \n    assert.equal(\n      actualEvent,\n      expectedEvent,\n      \"events should match\"\n    );\n  });\n});\n\ncontract(\"FundraiserFactory: fundraisers\", (accounts) => {\n  async function createFundraiserFactory(fundraiserCount, accounts) {\n    const factory = await FundraiserFactoryContract.new();\n    await addFundraisers(factory, fundraiserCount, accounts);\n    return factory;\n  }\n\n  async function addFundraisers(factory, count, accounts) {\n    const name = \"Beneficiary\";\n    const lowerCaseName = name.toLowerCase();\n    const beneficiary = accounts[1];\n\n    for (let i=0; i < count; i++) {\n      await factory.createFundraiser(\n        `${name} ${i}`,\n        `${lowerCaseName}${i}.com`,\n        `${lowerCaseName}${i}.png`,\n        `Description for ${name} ${i}`,\n        beneficiary\n      );\n    }\n  }\n\n  describe(\"when fundraisers collection is empty\", () => {\n    it(\"returns an empty collection\", async () => {\n      const factory = await createFundraiserFactory(0, accounts);\n      const fundraisers = await factory.fundraisers(10, 0);\n      assert.equal(\n        fundraisers.length,\n        0,\n        \"collection should be empty\"\n      );\n    });\n  });\n\n  describe(\"varying limits\", async () => {\n    let factory;\n    beforeEach(async () => {\n      factory = await createFundraiserFactory(30, accounts);\n    })\n  \n    it(\"returns 10 results when limit requested is 10\", async ()=>{\n      const fundraisers = await factory.fundraisers(10, 0);\n      assert.equal(\n        fundraisers.length,\n        10,\n        \"results size should be 10\"\n      );\n    });\n  \n    it(\"returns 20 results when limit requested is 20\", async ()=>{\n      const fundraisers = await factory.fundraisers(20, 0);\n      assert.equal(\n        fundraisers.length,\n        20,\n        \"results size should be 20\"\n      );\n    });\n  \n    it(\"returns 20 results when limit requested is 30\", async ()=>{\n      const fundraisers = await factory.fundraisers(30, 0);\n      assert.equal(\n        fundraisers.length,\n        20,\n        \"results size should be 20\"\n      );\n    });\n  })\n\n  describe(\"varying offset\", () => {\n    let factory;\n    beforeEach(async () => {\n      factory = await createFundraiserFactory(10, accounts);\n    });\n  \n    it(\"contains the fundraiser with the appropriate offset\",  async ()=>{\n      const fundraisers = await factory.fundraisers(1, 0);\n      const fundraiser = await FundraiserContract.at(fundraisers[0]);\n      const name = await fundraiser.name();\n      assert.ok(await name.includes(0), `${name} did not include the offset`);\n    });\n  \n    it(\"contains the fundraiser with the appropriate offset\",  async ()=>{\n      const fundraisers = await factory.fundraisers(1, 7);\n      const fundraiser = await FundraiserContract.at(fundraisers[0]);\n      const name = await fundraiser.name();\n      assert.ok(await name.includes(7), `${name} did not include the offset`);\n    });\n  });\n\n  describe(\"boundry conditions\", () => {\n    let factory;\n    beforeEach(async () => {\n      factory = await createFundraiserFactory(10, accounts);\n    });\n  \n    it(\"raises out of bounds error\", async () => {\n      try {\n        await factory.fundraisers(1, 11);\n        assert.fail(\"error was not raised\")\n      } catch(err) {\n        const expected = \"offset out of bounds\";\n        assert.ok(err.message.includes(expected), `${err.message}`);\n      }\n    });\n  \n    it(\"adjusts return size to prevent out of bounds error\", async () => {\n      try {\n        const fundraisers = await factory.fundraisers(10, 5);\n        assert.equal(\n          fundraisers.length,\n          5,\n          \"collection adjusted\"\n        );\n      } catch(err) {\n        assert.fail(\"limit and offset exceeded bounds\");\n      }\n    });\n  });\n});\n"
  },
  {
    "path": "chapter-7/fundraiser/test/fundraiser_test.js",
    "content": "const FundraiserContract = artifacts.require(\"Fundraiser\");\n\ncontract(\"Fundraiser\", accounts => {\n  let fundraiser;\n  const name =  \"Beneficiary Name\";\n  const url = \"beneficiaryname.org\";\n  const imageURL = \"https://placekitten.com/600/350\";\n  const description = \"Beneficiary description\";\n  const beneficiary = accounts[1];\n  const owner = accounts[0];\n\n  beforeEach(async () => {\n    fundraiser = await FundraiserContract.new(\n      name,\n      url,\n      imageURL,\n      description,\n      beneficiary,\n      owner \n    )\n  });\n\n  describe(\"initialization\", () => {\n    it(\"gets the beneficiary name\", async () => {\n      const actual = await fundraiser.name();\n      assert.equal(actual, name, \"names should match\");\n    });\n\n    it(\"gets the beneficiary url\", async () => {\n      const actual = await fundraiser.url();\n      assert.equal(actual, url, \"url should match\");\n    });\n\n    it(\"gets the beneficiary image url\", async () => {\n      const actual = await fundraiser.imageURL();\n      assert.equal(actual, imageURL, \"imageURL should match\");\n    });\n\n    it(\"gets the beneficiary description\", async () => {\n      const actual = await fundraiser.description();\n      assert.equal(actual, description, \"description should match\");\n    });\n\n    it(\"gets the beneficiary\", async () => {\n      const actual = await fundraiser.beneficiary();\n      assert.equal(actual, beneficiary, \"beneficiary addresses should match\");\n    });\n\n    it(\"gets the owner\", async () => {\n      const actual = await fundraiser.owner();\n      assert.equal(actual, owner, \"bios should match\");\n    });\n  });\n\n  describe(\"setBeneficiary\", () => {\n    const newBeneficiary = accounts[2];\n\n    it(\"updated beneficiary when called by owner account\", async () => {\n      await fundraiser.setBeneficiary(newBeneficiary, {from: owner});\n      const actualBeneficiary = await fundraiser.beneficiary();\n      assert.equal(actualBeneficiary, newBeneficiary, \"beneficiaries should match\");\n    });\n\n    it(\"throws and error when called from a non-owner account\", async () => {\n      try {\n        await fundraiser.setBeneficiary(newBeneficiary, {from: accounts[3]});\n        assert.fail(\"withdraw was not restricted to owners\")\n      } catch(err) {\n        const expectedError = \"Ownable: caller is not the owner\"\n        const actualError = err.reason;\n        assert.equal(actualError, expectedError, \"should not be permitted\")\n      }\n    });\n  });\n\n  describe(\"making donations\", () => {\n    const value = web3.utils.toWei('0.0289');\n    const donor = accounts[2];\n\n    it(\"increases myDonationsCount\", async () => {\n      const currentDonationsCount = await fundraiser.myDonationsCount(\n        {from: donor}\n      );\n      await fundraiser.donate({from: donor, value});\n      const newDonationsCount = await fundraiser.myDonationsCount({from: donor});\n    \n      assert.equal(\n        1,\n        newDonationsCount - currentDonationsCount,\n        \"myDonationsCount should increment by 1\");\n    });\n\n    it(\"includes donation in myDonations\", async () => {\n      await fundraiser.donate({from: donor, value});\n      const {values, dates} = await fundraiser.myDonations(\n        {from: donor}\n      );\n    \n      assert.equal(\n        value,\n        values[0],\n        \"values should match\"\n      );\n      assert(dates[0], \"date should be present\");\n    });\n\n    it(\"increases the totalDonations amount\", async () => {\n      const currentTotalDonations = await fundraiser.totalDonations();\n      await fundraiser.donate({from: donor, value});\n      const newTotalDonations = await fundraiser.totalDonations();\n    \n      const diff = newTotalDonations - currentTotalDonations;\n    \n      assert.equal(\n        diff,\n        value,\n        \"difference should match the donation value\"\n      )\n    });\n\n    it(\"increases donationsCount\", async () => {\n      const currentDonationsCount = await fundraiser.donationsCount();\n      await fundraiser.donate({from: donor, value});\n      const newDonationsCount = await fundraiser.donationsCount();\n    \n      assert.equal(\n        1,\n        newDonationsCount - currentDonationsCount,\n        \"donationsCount should increment by 1\");\n    });\n\n    it(\"emits the DonationReceived event\", async () => {\n      const tx = await fundraiser.donate({from: donor, value});\n      const expectedEvent = \"DonationReceived\";\n      const actualEvent = tx.logs[0].event;\n    \n      assert.equal(actualEvent, expectedEvent, \"events should match\");\n    });\n  });\n\n  describe(\"withdrawing funds\", () => {\n    beforeEach(async () => {\n      await fundraiser.donate(\n        {from: accounts[2], value: web3.utils.toWei('0.1')}\n      );\n    });\n\n    describe(\"access controls\", () => {\n      it(\"throws and error when called from a non-owner account\", async () => {\n        try {\n          await fundraiser.withdraw({from: accounts[3]});\n          assert.fail(\"withdraw was not restricted to owners\")\n        } catch(err) {\n          const expectedError = \"Ownable: caller is not the owner\"\n          const actualError = err.reason;\n          assert.equal(actualError, expectedError, \"should not be permitted\")\n        }\n      });\n\n      it(\"permits the owner to call the function\", async () => {\n        try {\n          await fundraiser.withdraw({from: owner});\n          assert(true, \"no errors were thrown\");\n        } catch(err) {\n          assert.fail(\"should not have thrown an error\");\n        }\n      });\n    });\n\n    it(\"transfers balance to beneficiary\", async () => {\n      const currentContractBalance = await web3.eth.getBalance(fundraiser.address);\n      const currentBeneficiaryBalance = await web3.eth.getBalance(beneficiary);\n    \n      await fundraiser.withdraw({from: owner});\n    \n      const newContractBalance = await web3.eth.getBalance(fundraiser.address);\n      const newBeneficiaryBalance = await web3.eth.getBalance(beneficiary);\n      const beneficiaryDifference = newBeneficiaryBalance - currentBeneficiaryBalance;\n    \n      assert.equal(\n        newContractBalance,\n        0,\n        \"contract should have a 0 balance\"\n      );\n      assert.equal(\n        beneficiaryDifference,\n        currentContractBalance,\n        \"beneficiary should receive all the funds\"\n      );\n    });\n\n    it(\"emits Withdraw event\", async () => {\n      const tx = await fundraiser.withdraw({from: owner});\n      const expectedEvent = \"Withdraw\";\n      const actualEvent = tx.logs[0].event;\n    \n      assert.equal(\n        actualEvent,\n        expectedEvent,\n        \"events should match\"\n      );\n    });\n  });\n\n  describe(\"fallback function\", () => {\n    const value = web3.utils.toWei('0.0289');\n\n    it(\"increases the totalDonations amount\", async () => {\n      const currentTotalDonations = await fundraiser.totalDonations();\n      await web3.eth.sendTransaction(\n        {to: fundraiser.address, from: accounts[9], value}\n      );\n      const newTotalDonations = await fundraiser.totalDonations();\n    \n      const diff = newTotalDonations - currentTotalDonations;\n    \n      assert.equal(\n        diff,\n        value,\n        \"difference should match the donation value\"\n      )\n    });\n\n    it(\"increases donationsCount\", async () => {\n      const currentDonationsCount = await fundraiser.donationsCount();\n      await web3.eth.sendTransaction(\n        {to: fundraiser.address, from: accounts[9], value}\n      );\n      const newDonationsCount = await fundraiser.donationsCount();\n    \n      assert.equal(\n        1,\n        newDonationsCount - currentDonationsCount,\n        \"donationsCount should increment by 1\");\n    });\n  });\n});;\n"
  },
  {
    "path": "chapter-7/fundraiser/truffle-config.js",
    "content": "const path = require(\"path\");\n\nmodule.exports = {\n  // See <http://truffleframework.com/docs/advanced/configuration>\n  // to customize your Truffle configuration!\n  contracts_build_directory: path.join(__dirname, \"client/src/contracts\"),\n  networks: {\n    develop: {\n      port: 8545\n    }\n  }\n};\n"
  },
  {
    "path": "chapter-9/README.md",
    "content": "This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).\n\n## Available Scripts\n\nIn the project directory, you can run:\n\n### `npm start`\n\nRuns the app in the development mode.<br>\nOpen [http://localhost:3000](http://localhost:3000) to view it in the browser.\n\nThe page will reload if you make edits.<br>\nYou will also see any lint errors in the console.\n\n### `npm test`\n\nLaunches the test runner in the interactive watch mode.<br>\nSee the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.\n\n### `npm run build`\n\nBuilds the app for production to the `build` folder.<br>\nIt correctly bundles React in production mode and optimizes the build for the best performance.\n\nThe build is minified and the filenames include the hashes.<br>\nYour app is ready to be deployed!\n\nSee the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.\n\n### `npm run eject`\n\n**Note: this is a one-way operation. Once you `eject`, you can’t go back!**\n\nIf you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.\n\nInstead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.\n\nYou don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.\n\n## Learn More\n\nYou can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).\n\nTo learn React, check out the [React documentation](https://reactjs.org/).\n"
  },
  {
    "path": "chapter-9/package.json",
    "content": "{\n  \"name\": \"client\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@material-ui/core\": \"^4.3.1\",\n    \"@openzeppelin/contracts\": \"^2.3.0\",\n    \"bootstrap\": \"^4.3.1\",\n    \"cryptocompare\": \"^1.0.0\",\n    \"get-eth-price\": \"^1.0.0\",\n    \"normalize.css\": \"^8.0.1\",\n    \"react\": \"^16.8.0\",\n    \"react-bootstrap\": \"^1.0.0-beta.10\",\n    \"react-dom\": \"^16.9.0\",\n    \"react-redux\": \"^7.1.1\",\n    \"react-router-dom\": \"^5.0.1\",\n    \"react-scripts\": \"2.1.1\",\n    \"redux\": \"^4.0.4\",\n    \"web3\": \"^1.2.1\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\"\n  },\n  \"eslintConfig\": {\n    \"extends\": \"react-app\"\n  },\n  \"browserslist\": [\n    \">0.2%\",\n    \"not dead\",\n    \"not ie <= 11\",\n    \"not op_mini all\"\n  ]\n}\n"
  },
  {
    "path": "chapter-9/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <link rel=\"shortcut icon\" href=\"%PUBLIC_URL%/favicon.ico\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <meta name=\"theme-color\" content=\"#000000\">\n    <!--\n      manifest.json provides metadata used when your web app is added to the\n      homescreen on Android. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\">\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>React App</title>\n  </head>\n  <body>\n    <noscript>\n      You need to enable JavaScript to run this app.\n    </noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "chapter-9/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "chapter-9/src/App.css",
    "content": "body {\n  margin: 0 !important;\n}\n\n.App {\n  text-align: center;\n}\n\n.donation-input-container {\n  display: flex;\n}\n\n.withdrawal-button {\n  margin-left: 10px;\n}\n\n.receipt-header {\n  border-bottom: 1px solid gray;\n}\n\n.receipt-container {\n  text-align: center;\n}\n\n.receipt-info {\n  display: flex;\n  padding: 50px;\n  justify-content: space-between;\n}\n\n.donation-receipt-link {\n  color: inherit;\n  text-decoration: none;\n}\n\n.main-container {\n  margin: 20px;\n}\n\n.donation-list {\n  margin-top: 10px;\n  margin-bottom: 10px;\n  display: flex;\n  justify-content: space-between;\n}\n\n.fundraiser-card-container {\n  display: inline-flex;\n  width: 250px;\n  height: 250px;\n  margin: 20px;\n}\n\n.MuiTextField-root {\n  display: block !important;\n}\n\n.MuiInputBase-root {\n  width: 300px !important;\n  margin-left: 3px;\n}\n\n.App-logo {\n  animation: App-logo-spin infinite 20s linear;\n  height: 40vmin;\n}\n\n.App-header {\n  background-color: #282c34;\n  min-height: 100vh;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  font-size: calc(10px + 2vmin);\n  color: white;\n}\n\n.App-link {\n  color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n\n\n.nav-link {\n  color: inherit;\n  text-decoration: none;\n  margin-right: 15px;\n}\n\n.nav-link:hover,\n.nav-link:active,\n.nav-link:visited {\n  color: black;\n  text-decoration: none;\n}\n"
  },
  {
    "path": "chapter-9/src/App.js",
    "content": "\nimport React, { useState, useEffect } from \"react\";\nimport FactoryContract from \"./contracts/Factory.json\";\nimport getWeb3 from \"./utils/getWeb3\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\nimport { BrowserRouter as Router, Route, Link, NavLink } from \"react-router-dom\";\n\nimport NewFundraiser from './NewFundraiser'\nimport Home from './Home'\nimport Receipts from './Receipts'\n\nimport \"./App.css\";\n\nconst App = () => {\n  const [state, setState] = useState({web3: null, accounts: null, contract: null});\n  const [storageValue, setStorageValue] = useState(0);\n\n  useEffect(() => {\n    const init = async() => {\n      try {\n        // Get network provider and web3 instance.\n        const web3 = await getWeb3();\n\n        // Use web3 to get the user's accounts.\n        const accounts = await web3.eth.getAccounts();\n\n        // Get the contract instance.\n        const networkId = await web3.eth.net.getId();\n        const deployedNetwork = FactoryContract.networks[networkId];\n        const instance = new web3.eth.Contract(\n          FactoryContract.abi,\n          deployedNetwork && deployedNetwork.address,\n        );\n\n        // Set web3, accounts, and contract to the state, and then proceed with an\n        setState({web3, accounts, contract: instance});\n\n      } catch(error) {\n        // Catch any errors for any of the above operations.\n        alert(\n          `Failed to load web3, accounts, or contract. Check console for details.`,\n        );\n        console.error(error);\n      }\n    }\n    init();\n  }, []);\n\n  const useStyles = makeStyles({\n    root: {\n      flexGrow: 1,\n    },\n  });\n\n  const classes = useStyles();\n\n  const runExample = async () => {\n    const { accounts, contract } = state;\n  };\n\n  return (\n    <div>\n      <Router>\n        <AppBar position=\"static\" color=\"default\" style={{ margin: 0 }}>\n          <Toolbar>\n           <Typography variant=\"h6\" color=\"inherit\">\n             <NavLink className=\"nav-link\" to=\"/\">Home</NavLink>\n           </Typography>\n           <NavLink className=\"nav-link\" to=\"/new/\">New</NavLink>\n          </Toolbar>\n       </AppBar>\n\n        <Route path=\"/\" exact component={Home} />\n        <Route path=\"/new/\" component={NewFundraiser} />\n        <Route path=\"/receipts\" component={Receipts} />\n      </Router>\n    </div>\n  )\n}\n\n\nexport default App;\n"
  },
  {
    "path": "chapter-9/src/App.test.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nit('renders without crashing', () => {\n  const div = document.createElement('div');\n  ReactDOM.render(<App />, div);\n  ReactDOM.unmountComponentAtNode(div);\n});\n"
  },
  {
    "path": "chapter-9/src/FundraiserCard.js",
    "content": "import React, { useEffect, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardMedia from '@material-ui/core/CardMedia';\nimport Button from '@material-ui/core/Button';\nimport Typography from '@material-ui/core/Typography';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\n\nimport FilledInput from '@material-ui/core/FilledInput';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\n\nimport getWeb3 from \"./utils/getWeb3\";\nimport FundraiserContract from \"./contracts/Fundraiser.json\";\nimport Web3 from 'web3'\n\nimport { Link } from 'react-router-dom'\n\nconst cc = require('cryptocompare')\n\nconst getModalStyle =() => {\n  const top = 50;\n  const left = 50;\n\n  return {\n    top,\n    left,\n  };\n}\n\nconst useStyles = makeStyles(theme => ({\n  container: {\n    display: 'flex',\n    flexWrap: 'wrap',\n  },\n  formControl: {\n    margin: theme.spacing(1),\n    display: 'table-cell'\n  },\n  card: {\n    maxWidth: 450,\n    height: 400\n  },\n  media: {\n    height: 140,\n  },\n  paper: {\n    position: 'absolute',\n    width: 500,\n    backgroundColor: theme.palette.background.paper,\n    border: 'none',\n    boxShadow: 'none',\n    padding: 4,\n  },\n}));\n\nconst FundraiserCard = (props) => {\n  const web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'))\n\n  const [ contract, setContract] = useState(null)\n  const [ accounts, setAccounts ] = useState(null)\n  const [ fund, setFundraiser ] = useState(null)\n  const [ fundName, setFundname ] = useState(null)\n  const [ bio, setBio ] = useState(null)\n  const [ totalDonations, setTotalDonations ] = useState(null)\n  const [ imageURL, setImageURL ] = useState(null)\n  const [ url, setURL ] = useState(null)\n  const [ open, setOpen] = React.useState(false);\n  const [ donationAmount, setDonationAmount] = useState(null)\n  const [ exchangeRate, setExchangeRate ] = useState(null)\n  const [ userDonations, setUserDonations ] = useState(null)\n  const [ isOwner, setIsOwner ] = useState(false)\n\n  const ethAmount = (donationAmount / exchangeRate || 0).toFixed(4)\n\n  const { fundraiser } = props\n\n  const classes = useStyles();\n\n  useEffect(() => {\n    if (fundraiser) {\n      init(fundraiser)\n    }\n  }, [fundraiser]);\n\n  const init = async (fundraiser) => {\n    try {\n      const fund = fundraiser\n      const networkId = await web3.eth.net.getId();\n      const deployedNetwork = FundraiserContract.networks[networkId];\n      const accounts = await web3.eth.getAccounts();\n      const instance = new web3.eth.Contract(\n        FundraiserContract.abi,\n        fund\n      );\n      setContract(instance)\n      setAccounts(accounts)\n\n      const name = await instance.methods.name().call()\n      const bio = await instance.methods.bio().call()\n      const totalDonations = await instance.methods.totalDonations().call()\n      const imageURL = await instance.methods.imageURL().call()\n      const url = await instance.methods.url().call()\n\n      const exchangeRate = await cc.price('ETH', ['USD'])\n      setExchangeRate(exchangeRate.USD)\n      const eth = web3.utils.fromWei(totalDonations, 'ether')\n      const dollarDonationAmount = exchangeRate.USD * eth\n\n      setTotalDonations(dollarDonationAmount.toFixed(2))\n      setFundname(name)\n      setBio(bio)\n      setImageURL(imageURL)\n      setURL(url)\n\n      const userDonations = await instance.methods.myDonations().call({ from: accounts[0]})\n      console.log(userDonations)\n      setUserDonations(userDonations)\n\n      const isUser = accounts[0]\n      const isOwner = await instance.methods.owner().call()\n      if (isOwner === accounts[[0]]) {\n        setIsOwner(true)\n      }\n    }\n    catch(error) {\n      alert(\n        `Failed to load web3, accounts, or contract. Check console for details.`,\n      );\n      console.error(error);\n    }\n  }\n\n  window.ethereum.on('accountsChanged', function (accounts) {\n    window.location.reload()\n  })\n\n  const handleOpen = () => {\n    setOpen(true);\n  };\n\n  const handleClose = () => {\n    setOpen(false);\n  };\n\n  const submitFunds = async () => {\n    const fundraisercontract = contract\n    const conversionRate = 18460;\n    const ethRate = exchangeRate\n    const ethTotal = donationAmount / ethRate\n    const donation = web3.utils.toWei(ethTotal.toString())\n\n    await contract.methods.donate(conversionRate).send({\n      from: accounts[0],\n      value: donation,\n      gas: 650000\n    })\n    setOpen(false);\n  }\n\n  const showReceipt = (amount, date) => {\n\n  }\n\n  const renderDonationsList = () => {\n    var donations = userDonations\n    if (donations === null) {return null}\n\n    const totalDonations = donations.values.length\n    let donationList = []\n    var i\n    for (i = 0; i < totalDonations; i++) {\n      const ethAmount = web3.utils.fromWei(donations.values[i])\n      const userDonation = exchangeRate * ethAmount\n      const donationDate = donations.dates[i]\n      donationList.push({ donationAmount: userDonation.toFixed(2), date: donationDate})\n    }\n\n    return donationList.map((donation) => {\n      return (\n        <div className=\"donation-list\">\n          <p>${donation.donationAmount}</p>\n\n          <Button variant=\"contained\" color=\"primary\">\n            <Link className=\"donation-receipt-link\" to={{ pathname: '/receipts', state: { fund: fundName, donation: donation.donationAmount, date: donation.date} }}>\n              Request Receipt\n            </Link>\n          </Button>\n        </div>\n      )\n    })\n  }\n\n  const withdrawalFunds = async () => {\n    await contract.methods.withdraw().send({\n      from: accounts[0],\n    })\n\n    alert('Funds Withdrawn!')\n  }\n\n  return (\n    <div className=\"fundraiser-card-container\">\n    <Dialog open={open} onClose={handleClose} aria-labelledby=\"form-dialog-title\">\n    <DialogTitle id=\"form-dialog-title\">\n      Donate to {fundName}\n    </DialogTitle>\n      <DialogContent>\n        <DialogContentText>\n          <img src={imageURL} width='200px' height='200px' />\n          <p>{bio}</p>\n\n          <div className=\"donation-input-container\">\n            <FormControl className={classes.formControl}>\n              $\n              <Input\n                id=\"component-simple\"\n                value={donationAmount}\n                onChange={(e) => setDonationAmount(e.target.value)}\n                placeholder=\"0.00\"\n               />\n            </FormControl>\n\n            <p>Eth: {ethAmount}</p>\n          </div>\n\n          <Button onClick={submitFunds} variant=\"contained\" color=\"primary\">\n            Donate\n          </Button>\n\n          <div>\n            <h3>My donations</h3>\n            {renderDonationsList()}\n          </div>\n        </DialogContentText>\n      </DialogContent>\n      <DialogActions>\n        <Button onClick={handleClose} color=\"primary\">\n          Cancel\n        </Button>\n        {isOwner &&\n          <Button\n            variant=\"contained\"\n            color=\"primary\"\n            onClick={withdrawalFunds}\n          >\n            Withdrawal\n          </Button>\n        }\n      </DialogActions>\n    </Dialog>\n\n    <Card className={classes.card} onClick={handleOpen}>\n      <CardActionArea>\n        <CardMedia\n          className={classes.media}\n          image={imageURL}\n          title=\"Fundraiser Image\"\n        />\n        <CardContent>\n          <Typography gutterBottom variant=\"h5\" component=\"h2\">\n            {fundName}\n          </Typography>\n          <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n            <p>{bio}</p>\n            <p>Total Donations: ${totalDonations}</p>\n          </Typography>\n        </CardContent>\n      </CardActionArea>\n      <CardActions>\n        <Button\n          onClick={handleOpen}\n          variant=\"contained\"\n          className={classes.button}>\n          View More\n        </Button>\n      </CardActions>\n    </Card>\n    </div>\n  )\n}\n\nexport default FundraiserCard;\n"
  },
  {
    "path": "chapter-9/src/Home.js",
    "content": "\nimport React, { useState, useEffect } from \"react\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport FundraiserCard from './FundraiserCard'\nimport getWeb3 from \"./utils/getWeb3\";\nimport FactoryContract from \"./contracts/Factory.json\";\nimport Web3 from 'web3'\n\nconst useStyles = makeStyles(theme => ({\n  button: {\n    margin: theme.spacing(1),\n  },\n  input: {\n    display: 'none',\n  },\n}));\n\n\nconst Home = () => {\n  const classes = useStyles();\n  const [ contract, setContract] = useState(null)\n  const [ accounts, setAccounts ] = useState(null)\n  const [ funds, setFunds ] = useState([])\n  const web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'))\n\n  useEffect(() => {\n    init()\n  }, []);\n\n  const init = async () => {\n    try {\n      const networkId = await web3.eth.net.getId();\n      const deployedNetwork = FactoryContract.networks[networkId];\n      const accounts = await web3.eth.getAccounts();\n      const instance = new web3.eth.Contract(\n        FactoryContract.abi,\n        deployedNetwork && deployedNetwork.address,\n      );\n      setContract(instance)\n      setAccounts(accounts)\n\n      const funds = await instance.methods.fundraisers().call()\n      setFunds(funds)\n    }\n    catch(error) {\n      alert(\n        `Failed to load web3, accounts, or contract. Check console for details.`,\n      );\n      console.error(error);\n    }\n  }\n\n  const displayFundraisers = () => {\n    return funds.map((fundraiser) => {\n      return (\n        <FundraiserCard\n          fundraiser={fundraiser}\n          key={fundraiser}\n        />\n      )\n    })\n  }\n\n  return (\n    <div className=\"main-container\">\n      {displayFundraisers()}\n    </div>\n  )\n}\n\nexport default Home;\n"
  },
  {
    "path": "chapter-9/src/NewFundraiser.js",
    "content": "\nimport React, { useState, useEffect } from \"react\";\nimport FormControl from '@material-ui/core/FormControl';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport TextField from '@material-ui/core/TextField';\nimport getWeb3 from \"./utils/getWeb3\";\nimport FactoryContract from \"./contracts/Factory.json\";\nimport Web3 from 'web3'\n\nconst useStyles = makeStyles(theme => ({\n  container: {\n    display: 'flex',\n    flexWrap: 'wrap',\n  },\n  textField: {\n    marginLeft: theme.spacing(1),\n    marginRight: theme.spacing(1),\n  },\n  dense: {\n    marginTop: theme.spacing(2),\n  },\n  menu: {\n    width: 200,\n  },\n}));\n\nconst NewFundraiser = () => {\nconst [labelWidth, setLabelWidth] = React.useState(0);\nconst labelRef = React.useRef(null);\nconst classes = useStyles();\nconst [ web3, setWeb3 ] = useState(null)\n\nuseEffect(() => {\n  const init = async() => {\n    try {\n      const web3 = await getWeb3();\n      const networkId = await web3.eth.net.getId();\n      const deployedNetwork = FactoryContract.networks[networkId];\n      const accounts = await web3.eth.getAccounts();\n      const instance = new web3.eth.Contract(\n        FactoryContract.abi,\n        deployedNetwork && deployedNetwork.address,\n      );\n\n      setWeb3(web3)\n      setContract(instance)\n      setAccounts(accounts)\n\n    } catch(error) {\n      alert(\n        `Failed to load web3, accounts, or contract. Check console for details.`,\n      );\n      console.error(error);\n    }\n  }\n  init();\n}, []);\n\nconst [ name, setFundraiserName ] = useState(null)\nconst [ website, setFundraiserWebsite ] = useState(null)\nconst [ description, setFundraiserDescription ] = useState(null)\nconst [ image, setImage ] = useState(null)\nconst [ address, setAddress ] = useState(null)\nconst [ custodian, setCustodian ] = useState(null)\nconst [ contract, setContract] = useState(null)\nconst [ accounts, setAccounts ] = useState(null)\n\nconst handleSubmit = async () => {\n  const imageURL = image\n  const bio = description\n  const beneficiary = address\n  const transaction = await contract.methods.createFundraiser(\n    name,\n    website,\n    imageURL,\n    bio,\n    beneficiary,\n    custodian\n  ).send({ from: accounts[0] })\n\n  alert('Successfully created fundraiser')\n}\n\n  return (\n    <div className=\"create-fundraiser-container\">\n      <h2>Create A New Fundraiser</h2>\n\n      <label>Name</label>\n      <TextField\n        id=\"outlined-bare\"\n        className={classes.textField}\n        placeholder=\"Fundraiser Name\"\n        margin=\"normal\"\n        onChange={(e) => setFundraiserName(e.target.value)}\n        variant=\"outlined\"\n        inputProps={{ 'aria-label': 'bare' }}\n      />\n\n      <label>Website</label>\n      <TextField\n        id=\"outlined-bare\"\n        className={classes.textField}\n        placeholder=\"Fundraiser Website\"\n        margin=\"normal\"\n        onChange={(e) => setFundraiserWebsite(e.target.value)}\n        variant=\"outlined\"\n        inputProps={{ 'aria-label': 'bare' }}\n      />\n\n      <label>Description</label>\n      <TextField\n        id=\"outlined-bare\"\n        className={classes.textField}\n        placeholder=\"Fundraiser Description\"\n        margin=\"normal\"\n        onChange={(e) => setFundraiserDescription(e.target.value)}\n        variant=\"outlined\"\n        inputProps={{ 'aria-label': 'bare' }}\n      />\n\n      <label>Image</label>\n      <TextField\n        id=\"outlined-bare\"\n        className={classes.textField}\n        placeholder=\"Fundraiser Image\"\n        margin=\"normal\"\n        onChange={(e) => setImage(e.target.value)}\n        variant=\"outlined\"\n        inputProps={{ 'aria-label': 'bare' }}\n      />\n\n      <label>Address</label>\n      <TextField\n        id=\"outlined-bare\"\n        className={classes.textField}\n        placeholder=\"Fundraiser Ethereum Address\"\n        margin=\"normal\"\n        onChange={(e) => setAddress(e.target.value)}\n        variant=\"outlined\"\n        inputProps={{ 'aria-label': 'bare' }}\n      />\n\n      <label>Custodian</label>\n      <TextField\n        id=\"outlined-bare\"\n        className={classes.textField}\n        placeholder=\"Fundraiser Custodian\"\n        margin=\"normal\"\n        onChange={(e) => setCustodian(e.target.value)}\n        variant=\"outlined\"\n        inputProps={{ 'aria-label': 'bare' }}\n      />\n\n      <Button\n        onClick={handleSubmit}\n        variant=\"contained\"\n        className={classes.button}>\n        Submit\n      </Button>\n    </div>\n  )\n}\n\n\nexport default NewFundraiser;\n"
  },
  {
    "path": "chapter-9/src/Receipts.js",
    "content": "import React, { useState, useEffect } from \"react\";\n\nconst Receipts = (props) => {\n  const [ donation, setDonation ] = useState(null)\n  const [ fundName, setFundName ] = useState(null)\n  const [ date, setDate ] = useState(null)\n\n  useEffect(() => {\n    const { donation, date, fund } = props.location.state\n\n    const formattedDate = new Date(parseInt(date))\n\n    setDonation(donation)\n    setDate(formattedDate.toString())\n    setFundName(fund)\n  }, []);\n\n  return (\n    <div className=\"receipt-container\">\n      <div className=\"receipt-header\">\n        <h3>Thank you for your donation to {fundName}</h3>\n      </div>\n\n      <div className=\"receipt-info\">\n        <div>Date of Donation: {date}</div>\n        <div>Donation Value: ${donation}</div>\n      </div>\n    </div>\n  )\n}\n\nexport default Receipts;\n"
  },
  {
    "path": "chapter-9/src/contracts/Factory.json",
    "content": "{\n  \"contractName\": \"Factory\",\n  \"abi\": [\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"name\": \"fundraiser\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"LogFundraiserCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"url\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"imageURL\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"bio\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"beneficiary\",\n          \"type\": \"address\"\n        },\n        {\n          \"name\": \"custodian\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"createFundraiser\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"fundraisersCount\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"fundraisers\",\n      \"outputs\": [\n        {\n          \"name\": \"fs\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"fundraisers\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"fs\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"fundraisersCount\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"url\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"imageURL\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"bio\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"beneficiary\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"custodian\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"createFundraiser\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"fundraiser\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"LogFundraiserCreated\\\",\\\"type\\\":\\\"event\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{}},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Factory.sol\\\":\\\"Factory\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/randallkanna/Documents/dev/book/fundraiser/client/node_modules/@openzeppelin/contracts/ownership/Ownable.sol\\\":{\\\"keccak256\\\":\\\"0xf79fb10e8235770eb4aea7249034076a3cc9f9119ad944fc48705bae9c9d20dc\\\",\\\"urls\\\":[\\\"bzzr://d12a11272051eb6586de8f7e0a82c04a98c9984ce8b2a6cf1ee439f65aba29a9\\\"]},\\\"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Factory.sol\\\":{\\\"keccak256\\\":\\\"0xc191a38221745e86be7454a147164100b00a612403359084ce4bc5d825b18124\\\",\\\"urls\\\":[\\\"bzzr://aad8ace28c5063db8bb8748350dc7e41ce036df200f891c72799f54f7f0e96a0\\\"]},\\\"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Fundraiser.sol\\\":{\\\"keccak256\\\":\\\"0x19055c641f5ff96a84149a81b8950c1387518095d8ce4451b951bc03d46d5c20\\\",\\\"urls\\\":[\\\"bzzr://2b8f024402ccb06c57f6a57a77f446a65b4a98be633351a4aa39aacd8c00a355\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b50611f31806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806307d98512146200004b5780639d3b435514620000ae578063bec23b2814620000ce575b600080fd5b620000556200039d565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156200009a5780820151818401526020810190506200007d565b505050509050019250505060405180910390f35b620000b862000485565b6040518082815260200191505060405180910390f35b6200039b600480360360c0811015620000e657600080fd5b81019080803590602001906401000000008111156200010457600080fd5b8201836020820111156200011757600080fd5b803590602001918460018302840111640100000000831117156200013a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156200019e57600080fd5b820183602082011115620001b157600080fd5b80359060200191846001830284011164010000000083111715620001d457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156200023857600080fd5b8201836020820111156200024b57600080fd5b803590602001918460018302840111640100000000831117156200026e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115620002d257600080fd5b820183602082011115620002e557600080fd5b803590602001918460018302840111640100000000831117156200030857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000491565b005b60606000620003ab62000485565b905080604051908082528060200260200182016040528015620003dd5781602001602082028038833980820191505090505b50915060008090505b818110156200047d5760008181548110620003fd57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168382815181106200043557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050620003e6565b508191505090565b60008080549050905090565b6000868686868686604051620004a79062000801565b80806020018060200180602001806020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185810385528b818151815260200191508051906020019080838360005b838110156200055657808201518184015260208101905062000539565b50505050905090810190601f168015620005845780820380516001836020036101000a031916815260200191505b5085810384528a818151815260200191508051906020019080838360005b83811015620005bf578082015181840152602081019050620005a2565b50505050905090810190601f168015620005ed5780820380516001836020036101000a031916815260200191505b50858103835289818151815260200191508051906020019080838360005b83811015620006285780820151818401526020810190506200060b565b50505050905090810190601f168015620006565780820380516001836020036101000a031916815260200191505b50858103825288818151815260200191508051906020019080838360005b838110156200069157808201518184015260208101905062000674565b50505050905090810190601f168015620006bf5780820380516001836020036101000a031916815260200191505b509a5050505050505050505050604051809103906000f080158015620006e9573d6000803e3d6000fd5b50905060008190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050866040518082805190602001908083835b6020831062000788578051825260208201915060208101905060208303925062000763565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390208173ffffffffffffffffffffffffffffffffffffffff167f90abfad37a2503e16cce667bb7e0542fe1af5963cfe29bdf5f778a83803c336260405160405180910390a350505050505050565b6116f680620008108339019056fe6080604052600060065560006007553480156200001b57600080fd5b50604051620016f6380380620016f6833981018060405260c08110156200004157600080fd5b8101908080516401000000008111156200005a57600080fd5b828101905060208101848111156200007157600080fd5b81518560018202830111640100000000821117156200008f57600080fd5b50509291906020018051640100000000811115620000ac57600080fd5b82810190506020810184811115620000c357600080fd5b8151856001820283011164010000000082111715620000e157600080fd5b50509291906020018051640100000000811115620000fe57600080fd5b828101905060208101848111156200011557600080fd5b81518560018202830111640100000000821117156200013357600080fd5b505092919060200180516401000000008111156200015057600080fd5b828101905060208101848111156200016757600080fd5b81518560018202830111640100000000821117156200018557600080fd5b50509291906020018051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a385600190805190602001906200027892919062000468565b5084600290805190602001906200029192919062000468565b508360039080519060200190620002aa92919062000468565b508260049080519060200190620002c392919062000468565b5081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000316816200032260201b60201c565b50505050505062000517565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620003aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620016d06026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004ab57805160ff1916838001178555620004dc565b82800160010185558215620004dc579182015b82811115620004db578251825591602001919060010190620004be565b5b509050620004eb9190620004ef565b5090565b6200051491905b8082111562000510576000816000905550600101620004f6565b5090565b90565b6111a980620005276000396000f3fe6080604052600436106100dd5760003560e01c80638da5cb5b1161007f578063de2ed89311610059578063de2ed893146104c4578063f14faf6f146104ef578063f2fde38b1461051d578063f516b4221461056e576100dd565b80638da5cb5b146103ae5780638f32d59b14610405578063b90497e014610434576100dd565b806338af3eed116100bb57806338af3eed146102995780633ccfd60b146102f05780635600f04f14610307578063715018a614610397576100dd565b806306fdde03146100e25780631a57f7b4146101725780631f5225951461026e575b600080fd5b3480156100ee57600080fd5b506100f76105fe565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013757808201518184015260208101905061011c565b50505050905090810190601f1680156101645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561017e57600080fd5b506101876106a0565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156101d25780820151818401526020810190506101b7565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156102145780820151818401526020810190506101f9565b50505050905001848103825285818151815260200191508051906020019060200280838360005b8381101561025657808201518184015260208101905061023b565b50505050905001965050505050505060405180910390f35b34801561027a57600080fd5b50610283610909565b6040518082815260200191505060405180910390f35b3480156102a557600080fd5b506102ae610913565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102fc57600080fd5b5061030561093d565b005b34801561031357600080fd5b5061031c610a76565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561035c578082015181840152602081019050610341565b50505050905090810190601f1680156103895780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103a357600080fd5b506103ac610b18565b005b3480156103ba57600080fd5b506103c3610c51565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041157600080fd5b5061041a610c7a565b604051808215151515815260200191505060405180910390f35b34801561044057600080fd5b50610449610cd1565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561048957808201518184015260208101905061046e565b50505050905090810190601f1680156104b65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104d057600080fd5b506104d9610d73565b6040518082815260200191505060405180910390f35b61051b6004803603602081101561050557600080fd5b8101908080359060200190929190505050610d7d565b005b34801561052957600080fd5b5061056c6004803603602081101561054057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eca565b005b34801561057a57600080fd5b50610583610f50565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105c35780820151818401526020810190506105a8565b50505050905090810190601f1680156105f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606060018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106965780601f1061066b57610100808354040283529160200191610696565b820191906000526020600020905b81548152906001019060200180831161067957829003601f168201915b5050505050905090565b60608060606000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090508060405190808252806020026020018201604052801561071b5781602001602082028038833980820191505090505b5093508060405190808252806020026020018201604052801561074d5781602001602082028038833980820191505090505b5092508060405190808252806020026020018201604052801561077f5781602001602082028038833980820191505090505b50915060008090505b818110156108f957600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081815481106107da57fe5b9060005260206000209060030201600001548582815181106107f857fe5b602002602001018181525050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061084e57fe5b90600052602060002090600302016001015484828151811061086c57fe5b602002602001018181525050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081815481106108c257fe5b9060005260206000209060030201600201548382815181106108e057fe5b6020026020010181815250508080600101915050610788565b5083838393509350935050909192565b6000600754905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610945610c7a565b6109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff16319050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a3b573d6000803e3d6000fd5b507f879a83fc17750905b8aef4ef85e6701b84a50e15d4463dc3c2e7fb0f9dbcf75d816040518082815260200191505060405180910390a150565b606060028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b610b20610c7a565b610b92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d695780601f10610d3e57610100808354040283529160200191610d69565b820191906000526020600020905b815481529060010190602001808311610d4c57829003601f168201915b5050505050905090565b6000600654905090565b610d85611136565b6040518060600160405280348152602001428152602001838152509050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505090600182039060005260206000209060030201600090919290919091506000820151816000015560208201518160010155604082015181600201555050503460066000828254019250508190555060016007600082825401925050819055507f8fa09d0d0409c35ef3a40d2e1f9f00512eedb373c85bd5b86177ba58c3a5a48e33348360200151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050565b610ed2610c7a565b610f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610f4d81610ff2565b50565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fe85780601f10610fbd57610100808354040283529160200191610fe8565b820191906000526020600020905b815481529060010190602001808311610fcb57829003601f168201915b5050505050905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611078576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806111586026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060600160405280600081526020016000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a165627a7a7230582012faf8a42a7625617a68d9b57f5b0b15d50babba6dbac248b2b4f6c83200a4a100294f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a165627a7a7230582037da87857a9bfc2af4b124bf3c0a908e9ff57f628a30a8c24433852557e11ea60029\",\n  \"deployedBytecode\": \"0x60806040523480156200001157600080fd5b5060043610620000465760003560e01c806307d98512146200004b5780639d3b435514620000ae578063bec23b2814620000ce575b600080fd5b620000556200039d565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156200009a5780820151818401526020810190506200007d565b505050509050019250505060405180910390f35b620000b862000485565b6040518082815260200191505060405180910390f35b6200039b600480360360c0811015620000e657600080fd5b81019080803590602001906401000000008111156200010457600080fd5b8201836020820111156200011757600080fd5b803590602001918460018302840111640100000000831117156200013a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156200019e57600080fd5b820183602082011115620001b157600080fd5b80359060200191846001830284011164010000000083111715620001d457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156200023857600080fd5b8201836020820111156200024b57600080fd5b803590602001918460018302840111640100000000831117156200026e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115620002d257600080fd5b820183602082011115620002e557600080fd5b803590602001918460018302840111640100000000831117156200030857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000491565b005b60606000620003ab62000485565b905080604051908082528060200260200182016040528015620003dd5781602001602082028038833980820191505090505b50915060008090505b818110156200047d5760008181548110620003fd57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168382815181106200043557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050620003e6565b508191505090565b60008080549050905090565b6000868686868686604051620004a79062000801565b80806020018060200180602001806020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185810385528b818151815260200191508051906020019080838360005b838110156200055657808201518184015260208101905062000539565b50505050905090810190601f168015620005845780820380516001836020036101000a031916815260200191505b5085810384528a818151815260200191508051906020019080838360005b83811015620005bf578082015181840152602081019050620005a2565b50505050905090810190601f168015620005ed5780820380516001836020036101000a031916815260200191505b50858103835289818151815260200191508051906020019080838360005b83811015620006285780820151818401526020810190506200060b565b50505050905090810190601f168015620006565780820380516001836020036101000a031916815260200191505b50858103825288818151815260200191508051906020019080838360005b838110156200069157808201518184015260208101905062000674565b50505050905090810190601f168015620006bf5780820380516001836020036101000a031916815260200191505b509a5050505050505050505050604051809103906000f080158015620006e9573d6000803e3d6000fd5b50905060008190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050866040518082805190602001908083835b6020831062000788578051825260208201915060208101905060208303925062000763565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390208173ffffffffffffffffffffffffffffffffffffffff167f90abfad37a2503e16cce667bb7e0542fe1af5963cfe29bdf5f778a83803c336260405160405180910390a350505050505050565b6116f680620008108339019056fe6080604052600060065560006007553480156200001b57600080fd5b50604051620016f6380380620016f6833981018060405260c08110156200004157600080fd5b8101908080516401000000008111156200005a57600080fd5b828101905060208101848111156200007157600080fd5b81518560018202830111640100000000821117156200008f57600080fd5b50509291906020018051640100000000811115620000ac57600080fd5b82810190506020810184811115620000c357600080fd5b8151856001820283011164010000000082111715620000e157600080fd5b50509291906020018051640100000000811115620000fe57600080fd5b828101905060208101848111156200011557600080fd5b81518560018202830111640100000000821117156200013357600080fd5b505092919060200180516401000000008111156200015057600080fd5b828101905060208101848111156200016757600080fd5b81518560018202830111640100000000821117156200018557600080fd5b50509291906020018051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a385600190805190602001906200027892919062000468565b5084600290805190602001906200029192919062000468565b508360039080519060200190620002aa92919062000468565b508260049080519060200190620002c392919062000468565b5081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000316816200032260201b60201c565b50505050505062000517565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620003aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620016d06026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004ab57805160ff1916838001178555620004dc565b82800160010185558215620004dc579182015b82811115620004db578251825591602001919060010190620004be565b5b509050620004eb9190620004ef565b5090565b6200051491905b8082111562000510576000816000905550600101620004f6565b5090565b90565b6111a980620005276000396000f3fe6080604052600436106100dd5760003560e01c80638da5cb5b1161007f578063de2ed89311610059578063de2ed893146104c4578063f14faf6f146104ef578063f2fde38b1461051d578063f516b4221461056e576100dd565b80638da5cb5b146103ae5780638f32d59b14610405578063b90497e014610434576100dd565b806338af3eed116100bb57806338af3eed146102995780633ccfd60b146102f05780635600f04f14610307578063715018a614610397576100dd565b806306fdde03146100e25780631a57f7b4146101725780631f5225951461026e575b600080fd5b3480156100ee57600080fd5b506100f76105fe565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013757808201518184015260208101905061011c565b50505050905090810190601f1680156101645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561017e57600080fd5b506101876106a0565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156101d25780820151818401526020810190506101b7565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156102145780820151818401526020810190506101f9565b50505050905001848103825285818151815260200191508051906020019060200280838360005b8381101561025657808201518184015260208101905061023b565b50505050905001965050505050505060405180910390f35b34801561027a57600080fd5b50610283610909565b6040518082815260200191505060405180910390f35b3480156102a557600080fd5b506102ae610913565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102fc57600080fd5b5061030561093d565b005b34801561031357600080fd5b5061031c610a76565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561035c578082015181840152602081019050610341565b50505050905090810190601f1680156103895780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103a357600080fd5b506103ac610b18565b005b3480156103ba57600080fd5b506103c3610c51565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041157600080fd5b5061041a610c7a565b604051808215151515815260200191505060405180910390f35b34801561044057600080fd5b50610449610cd1565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561048957808201518184015260208101905061046e565b50505050905090810190601f1680156104b65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104d057600080fd5b506104d9610d73565b6040518082815260200191505060405180910390f35b61051b6004803603602081101561050557600080fd5b8101908080359060200190929190505050610d7d565b005b34801561052957600080fd5b5061056c6004803603602081101561054057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eca565b005b34801561057a57600080fd5b50610583610f50565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105c35780820151818401526020810190506105a8565b50505050905090810190601f1680156105f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606060018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106965780601f1061066b57610100808354040283529160200191610696565b820191906000526020600020905b81548152906001019060200180831161067957829003601f168201915b5050505050905090565b60608060606000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090508060405190808252806020026020018201604052801561071b5781602001602082028038833980820191505090505b5093508060405190808252806020026020018201604052801561074d5781602001602082028038833980820191505090505b5092508060405190808252806020026020018201604052801561077f5781602001602082028038833980820191505090505b50915060008090505b818110156108f957600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081815481106107da57fe5b9060005260206000209060030201600001548582815181106107f857fe5b602002602001018181525050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061084e57fe5b90600052602060002090600302016001015484828151811061086c57fe5b602002602001018181525050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081815481106108c257fe5b9060005260206000209060030201600201548382815181106108e057fe5b6020026020010181815250508080600101915050610788565b5083838393509350935050909192565b6000600754905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610945610c7a565b6109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff16319050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a3b573d6000803e3d6000fd5b507f879a83fc17750905b8aef4ef85e6701b84a50e15d4463dc3c2e7fb0f9dbcf75d816040518082815260200191505060405180910390a150565b606060028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b610b20610c7a565b610b92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d695780601f10610d3e57610100808354040283529160200191610d69565b820191906000526020600020905b815481529060010190602001808311610d4c57829003601f168201915b5050505050905090565b6000600654905090565b610d85611136565b6040518060600160405280348152602001428152602001838152509050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505090600182039060005260206000209060030201600090919290919091506000820151816000015560208201518160010155604082015181600201555050503460066000828254019250508190555060016007600082825401925050819055507f8fa09d0d0409c35ef3a40d2e1f9f00512eedb373c85bd5b86177ba58c3a5a48e33348360200151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050565b610ed2610c7a565b610f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610f4d81610ff2565b50565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fe85780601f10610fbd57610100808354040283529160200191610fe8565b820191906000526020600020905b815481529060010190602001808311610fcb57829003601f168201915b5050505050905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611078576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806111586026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060600160405280600081526020016000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a165627a7a7230582012faf8a42a7625617a68d9b57f5b0b15d50babba6dbac248b2b4f6c83200a4a100294f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a165627a7a7230582037da87857a9bfc2af4b124bf3c0a908e9ff57f628a30a8c24433852557e11ea60029\",\n  \"sourceMap\": \"63:1035:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;63:1035:1;;;;;;;\",\n  \"deployedSourceMap\": \"63:1035:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;63:1035:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;829:267;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;829:267:1;;;;;;;;;;;;;;;;;722:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;210:505;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;210:505:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;210:505:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;210:505:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;210:505:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;210:505:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;210:505:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;210:505:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;210:505:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;210:505:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;210:505:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;210:505:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;210:505:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;210:505:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;210:505:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;210:505:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;210:505:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;210:505:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;829:267;872:22;906:13;922:18;:16;:18::i;:::-;906:34;;972:5;955:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;955:23:1;;;;950:28;;992:9;1004:1;992:13;;988:83;1011:5;1007:1;:9;988:83;;;1045:12;1058:1;1045:15;;;;;;;;;;;;;;;;;;;;;;;;;1037:2;1040:1;1037:5;;;;;;;;;;;;;:23;;;;;;;;;;;1018:3;;;;;;;988:83;;;;1087:2;1080:9;;;829:267;:::o;722:100::-;770:7;796:12;:19;;;;789:26;;722:100;:::o;210:505::-;437:21;489:4;507:3;524:8;546:3;563:11;588:9;461:146;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;461:146:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;461:146:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;461:146:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;461:146:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;461:146:1;437:170;;617:12;635:10;617:29;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;617:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;703:4;661:47;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;661:47:1;;;;;;;;;;;;;;;;690:10;661:47;;;;;;;;;;;;210:505;;;;;;;:::o;63:1035::-;;;;;;;;:::o\",\n  \"source\": \"pragma solidity >0.4.23 <0.7.0;\\n\\n import \\\"./Fundraiser.sol\\\";\\n\\n contract Factory {\\n\\n     Fundraiser[] private _fundraisers;\\n    event LogFundraiserCreated(address indexed fundraiser, string indexed name);\\n\\n     function createFundraiser(\\n        string memory name,\\n        string memory url,\\n        string memory imageURL,\\n        string memory bio,\\n        address payable beneficiary,\\n        address custodian\\n    ) public {\\n        Fundraiser fundraiser = new Fundraiser(\\n            name,\\n            url,\\n            imageURL,\\n            bio,\\n            beneficiary,\\n            custodian\\n        );\\n        _fundraisers.push(fundraiser);\\n        emit LogFundraiserCreated(address(fundraiser), name);\\n    }\\n\\n     function fundraisersCount() public view returns(uint256) {\\n        return _fundraisers.length;\\n    }\\n\\n     function fundraisers() public view returns(Fundraiser[] memory fs) {\\n        uint256 count = fundraisersCount();\\n        fs = new Fundraiser[](count);\\n        for(uint256 i = 0; i < count; i++) {\\n            fs[i] = _fundraisers[i];\\n        }\\n        return fs;\\n    }\\n}\\n\",\n  \"sourcePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Factory.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Factory.sol\",\n    \"exportedSymbols\": {\n      \"Factory\": [\n        215\n      ]\n    },\n    \"id\": 216,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 112,\n        \"literals\": [\n          \"solidity\",\n          \">\",\n          \"0.4\",\n          \".23\",\n          \"<\",\n          \"0.7\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:31:1\"\n      },\n      {\n        \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Fundraiser.sol\",\n        \"file\": \"./Fundraiser.sol\",\n        \"id\": 113,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 216,\n        \"sourceUnit\": 520,\n        \"src\": \"34:26:1\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [\n          519\n        ],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 215,\n        \"linearizedBaseContracts\": [\n          215\n        ],\n        \"name\": \"Factory\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 116,\n            \"name\": \"_fundraisers\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 215,\n            \"src\": \"88:33:1\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_storage\",\n              \"typeString\": \"contract Fundraiser[]\"\n            },\n            \"typeName\": {\n              \"baseType\": {\n                \"contractScope\": null,\n                \"id\": 114,\n                \"name\": \"Fundraiser\",\n                \"nodeType\": \"UserDefinedTypeName\",\n                \"referencedDeclaration\": 519,\n                \"src\": \"88:10:1\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                  \"typeString\": \"contract Fundraiser\"\n                }\n              },\n              \"id\": 115,\n              \"length\": null,\n              \"nodeType\": \"ArrayTypeName\",\n              \"src\": \"88:12:1\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_storage_ptr\",\n                \"typeString\": \"contract Fundraiser[]\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 122,\n            \"name\": \"LogFundraiserCreated\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 121,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 118,\n                  \"indexed\": true,\n                  \"name\": \"fundraiser\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 122,\n                  \"src\": \"154:26:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 117,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"154:7:1\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 120,\n                  \"indexed\": true,\n                  \"name\": \"name\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 122,\n                  \"src\": \"182:19:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 119,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"182:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"153:49:1\"\n            },\n            \"src\": \"127:76:1\"\n          },\n          {\n            \"body\": {\n              \"id\": 162,\n              \"nodeType\": \"Block\",\n              \"src\": \"427:288:1\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    138\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 138,\n                      \"name\": \"fundraiser\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 162,\n                      \"src\": \"437:21:1\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                        \"typeString\": \"contract Fundraiser\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 137,\n                        \"name\": \"Fundraiser\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 519,\n                        \"src\": \"437:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 148,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 141,\n                        \"name\": \"name\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 124,\n                        \"src\": \"489:4:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 142,\n                        \"name\": \"url\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 126,\n                        \"src\": \"507:3:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 143,\n                        \"name\": \"imageURL\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 128,\n                        \"src\": \"524:8:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 144,\n                        \"name\": \"bio\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 130,\n                        \"src\": \"546:3:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 145,\n                        \"name\": \"beneficiary\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 132,\n                        \"src\": \"563:11:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 146,\n                        \"name\": \"custodian\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 134,\n                        \"src\": \"588:9:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 140,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"NewExpression\",\n                      \"src\": \"461:14:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_creation_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_payable_$_t_address_$returns$_t_contract$_Fundraiser_$519_$\",\n                        \"typeString\": \"function (string memory,string memory,string memory,string memory,address payable,address) returns (contract Fundraiser)\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 139,\n                        \"name\": \"Fundraiser\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 519,\n                        \"src\": \"465:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      }\n                    },\n                    \"id\": 147,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"461:146:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                      \"typeString\": \"contract Fundraiser\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"437:170:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 152,\n                        \"name\": \"fundraiser\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 138,\n                        \"src\": \"635:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 149,\n                        \"name\": \"_fundraisers\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 116,\n                        \"src\": \"617:12:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_storage\",\n                          \"typeString\": \"contract Fundraiser[] storage ref\"\n                        }\n                      },\n                      \"id\": 151,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"push\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"617:17:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_contract$_Fundraiser_$519_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (contract Fundraiser) returns (uint256)\"\n                      }\n                    },\n                    \"id\": 153,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"617:29:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 154,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"617:29:1\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 157,\n                            \"name\": \"fundraiser\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 138,\n                            \"src\": \"690:10:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          ],\n                          \"id\": 156,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"682:7:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": \"address\"\n                        },\n                        \"id\": 158,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"682:19:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 159,\n                        \"name\": \"name\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 124,\n                        \"src\": \"703:4:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      ],\n                      \"id\": 155,\n                      \"name\": \"LogFundraiserCreated\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 122,\n                      \"src\": \"661:20:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (address,string memory)\"\n                      }\n                    },\n                    \"id\": 160,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"661:47:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 161,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"656:52:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 163,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"createFundraiser\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 135,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 124,\n                  \"name\": \"name\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 163,\n                  \"src\": \"245:18:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 123,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"245:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 126,\n                  \"name\": \"url\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 163,\n                  \"src\": \"273:17:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 125,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"273:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 128,\n                  \"name\": \"imageURL\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 163,\n                  \"src\": \"300:22:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 127,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"300:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 130,\n                  \"name\": \"bio\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 163,\n                  \"src\": \"332:17:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 129,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"332:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 132,\n                  \"name\": \"beneficiary\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 163,\n                  \"src\": \"359:27:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"typeName\": {\n                    \"id\": 131,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"359:15:1\",\n                    \"stateMutability\": \"payable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 134,\n                  \"name\": \"custodian\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 163,\n                  \"src\": \"396:17:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 133,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"396:7:1\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"235:184:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 136,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"427:0:1\"\n            },\n            \"scope\": 215,\n            \"src\": \"210:505:1\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 171,\n              \"nodeType\": \"Block\",\n              \"src\": \"779:43:1\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 168,\n                      \"name\": \"_fundraisers\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 116,\n                      \"src\": \"796:12:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_storage\",\n                        \"typeString\": \"contract Fundraiser[] storage ref\"\n                      }\n                    },\n                    \"id\": 169,\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"length\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"796:19:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 167,\n                  \"id\": 170,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"789:26:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 172,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"fundraisersCount\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 164,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"747:2:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 167,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 166,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 172,\n                  \"src\": \"770:7:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 165,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"770:7:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"769:9:1\"\n            },\n            \"scope\": 215,\n            \"src\": \"722:100:1\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 213,\n              \"nodeType\": \"Block\",\n              \"src\": \"896:200:1\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    179\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 179,\n                      \"name\": \"count\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 213,\n                      \"src\": \"906:13:1\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 178,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"906:7:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 182,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"id\": 180,\n                      \"name\": \"fundraisersCount\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 172,\n                      \"src\": \"922:16:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_view$__$returns$_t_uint256_$\",\n                        \"typeString\": \"function () view returns (uint256)\"\n                      }\n                    },\n                    \"id\": 181,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"922:18:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"906:34:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 189,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 183,\n                      \"name\": \"fs\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 176,\n                      \"src\": \"950:2:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_memory_ptr\",\n                        \"typeString\": \"contract Fundraiser[] memory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 187,\n                          \"name\": \"count\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 179,\n                          \"src\": \"972:5:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"id\": 186,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"NewExpression\",\n                        \"src\": \"955:16:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_contract$_Fundraiser_$519_$dyn_memory_$\",\n                          \"typeString\": \"function (uint256) pure returns (contract Fundraiser[] memory)\"\n                        },\n                        \"typeName\": {\n                          \"baseType\": {\n                            \"contractScope\": null,\n                            \"id\": 184,\n                            \"name\": \"Fundraiser\",\n                            \"nodeType\": \"UserDefinedTypeName\",\n                            \"referencedDeclaration\": 519,\n                            \"src\": \"959:10:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          },\n                          \"id\": 185,\n                          \"length\": null,\n                          \"nodeType\": \"ArrayTypeName\",\n                          \"src\": \"959:12:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_storage_ptr\",\n                            \"typeString\": \"contract Fundraiser[]\"\n                          }\n                        }\n                      },\n                      \"id\": 188,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"955:23:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_memory\",\n                        \"typeString\": \"contract Fundraiser[] memory\"\n                      }\n                    },\n                    \"src\": \"950:28:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_memory_ptr\",\n                      \"typeString\": \"contract Fundraiser[] memory\"\n                    }\n                  },\n                  \"id\": 190,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"950:28:1\"\n                },\n                {\n                  \"body\": {\n                    \"id\": 209,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"1023:48:1\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 207,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 201,\n                              \"name\": \"fs\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 176,\n                              \"src\": \"1037:2:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_memory_ptr\",\n                                \"typeString\": \"contract Fundraiser[] memory\"\n                              }\n                            },\n                            \"id\": 203,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 202,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 192,\n                              \"src\": \"1040:1:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"1037:5:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 204,\n                              \"name\": \"_fundraisers\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 116,\n                              \"src\": \"1045:12:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_storage\",\n                                \"typeString\": \"contract Fundraiser[] storage ref\"\n                              }\n                            },\n                            \"id\": 206,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 205,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 192,\n                              \"src\": \"1058:1:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"1045:15:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          },\n                          \"src\": \"1037:23:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                            \"typeString\": \"contract Fundraiser\"\n                          }\n                        },\n                        \"id\": 208,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"1037:23:1\"\n                      }\n                    ]\n                  },\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 197,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 195,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 192,\n                      \"src\": \"1007:1:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 196,\n                      \"name\": \"count\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 179,\n                      \"src\": \"1011:5:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1007:9:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 210,\n                  \"initializationExpression\": {\n                    \"assignments\": [\n                      192\n                    ],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 192,\n                        \"name\": \"i\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"scope\": 210,\n                        \"src\": \"992:9:1\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 191,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"992:7:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 194,\n                    \"initialValue\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 193,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1004:1:1\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"992:13:1\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 199,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": false,\n                      \"src\": \"1018:3:1\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 198,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 192,\n                        \"src\": \"1018:1:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 200,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"1018:3:1\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"988:83:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 211,\n                    \"name\": \"fs\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 176,\n                    \"src\": \"1087:2:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_memory_ptr\",\n                      \"typeString\": \"contract Fundraiser[] memory\"\n                    }\n                  },\n                  \"functionReturnParameters\": 177,\n                  \"id\": 212,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1080:9:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 214,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"fundraisers\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 173,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"849:2:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 177,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 176,\n                  \"name\": \"fs\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 214,\n                  \"src\": \"872:22:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_memory_ptr\",\n                    \"typeString\": \"contract Fundraiser[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"contractScope\": null,\n                      \"id\": 174,\n                      \"name\": \"Fundraiser\",\n                      \"nodeType\": \"UserDefinedTypeName\",\n                      \"referencedDeclaration\": 519,\n                      \"src\": \"872:10:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                        \"typeString\": \"contract Fundraiser\"\n                      }\n                    },\n                    \"id\": 175,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"872:12:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_storage_ptr\",\n                      \"typeString\": \"contract Fundraiser[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"871:24:1\"\n            },\n            \"scope\": 215,\n            \"src\": \"829:267:1\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          }\n        ],\n        \"scope\": 216,\n        \"src\": \"63:1035:1\"\n      }\n    ],\n    \"src\": \"0:1099:1\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Factory.sol\",\n    \"exportedSymbols\": {\n      \"Factory\": [\n        215\n      ]\n    },\n    \"id\": 216,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 112,\n        \"literals\": [\n          \"solidity\",\n          \">\",\n          \"0.4\",\n          \".23\",\n          \"<\",\n          \"0.7\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:31:1\"\n      },\n      {\n        \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Fundraiser.sol\",\n        \"file\": \"./Fundraiser.sol\",\n        \"id\": 113,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 216,\n        \"sourceUnit\": 520,\n        \"src\": \"34:26:1\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [\n          519\n        ],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 215,\n        \"linearizedBaseContracts\": [\n          215\n        ],\n        \"name\": \"Factory\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 116,\n            \"name\": \"_fundraisers\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 215,\n            \"src\": \"88:33:1\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_storage\",\n              \"typeString\": \"contract Fundraiser[]\"\n            },\n            \"typeName\": {\n              \"baseType\": {\n                \"contractScope\": null,\n                \"id\": 114,\n                \"name\": \"Fundraiser\",\n                \"nodeType\": \"UserDefinedTypeName\",\n                \"referencedDeclaration\": 519,\n                \"src\": \"88:10:1\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                  \"typeString\": \"contract Fundraiser\"\n                }\n              },\n              \"id\": 115,\n              \"length\": null,\n              \"nodeType\": \"ArrayTypeName\",\n              \"src\": \"88:12:1\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_storage_ptr\",\n                \"typeString\": \"contract Fundraiser[]\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 122,\n            \"name\": \"LogFundraiserCreated\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 121,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 118,\n                  \"indexed\": true,\n                  \"name\": \"fundraiser\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 122,\n                  \"src\": \"154:26:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 117,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"154:7:1\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 120,\n                  \"indexed\": true,\n                  \"name\": \"name\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 122,\n                  \"src\": \"182:19:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 119,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"182:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"153:49:1\"\n            },\n            \"src\": \"127:76:1\"\n          },\n          {\n            \"body\": {\n              \"id\": 162,\n              \"nodeType\": \"Block\",\n              \"src\": \"427:288:1\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    138\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 138,\n                      \"name\": \"fundraiser\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 162,\n                      \"src\": \"437:21:1\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                        \"typeString\": \"contract Fundraiser\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 137,\n                        \"name\": \"Fundraiser\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 519,\n                        \"src\": \"437:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 148,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 141,\n                        \"name\": \"name\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 124,\n                        \"src\": \"489:4:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 142,\n                        \"name\": \"url\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 126,\n                        \"src\": \"507:3:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 143,\n                        \"name\": \"imageURL\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 128,\n                        \"src\": \"524:8:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 144,\n                        \"name\": \"bio\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 130,\n                        \"src\": \"546:3:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 145,\n                        \"name\": \"beneficiary\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 132,\n                        \"src\": \"563:11:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 146,\n                        \"name\": \"custodian\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 134,\n                        \"src\": \"588:9:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 140,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"NewExpression\",\n                      \"src\": \"461:14:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_creation_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_payable_$_t_address_$returns$_t_contract$_Fundraiser_$519_$\",\n                        \"typeString\": \"function (string memory,string memory,string memory,string memory,address payable,address) returns (contract Fundraiser)\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 139,\n                        \"name\": \"Fundraiser\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 519,\n                        \"src\": \"465:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      }\n                    },\n                    \"id\": 147,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"461:146:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                      \"typeString\": \"contract Fundraiser\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"437:170:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 152,\n                        \"name\": \"fundraiser\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 138,\n                        \"src\": \"635:10:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                          \"typeString\": \"contract Fundraiser\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 149,\n                        \"name\": \"_fundraisers\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 116,\n                        \"src\": \"617:12:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_storage\",\n                          \"typeString\": \"contract Fundraiser[] storage ref\"\n                        }\n                      },\n                      \"id\": 151,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"push\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"617:17:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_contract$_Fundraiser_$519_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (contract Fundraiser) returns (uint256)\"\n                      }\n                    },\n                    \"id\": 153,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"617:29:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 154,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"617:29:1\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 157,\n                            \"name\": \"fundraiser\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 138,\n                            \"src\": \"690:10:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          ],\n                          \"id\": 156,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"682:7:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": \"address\"\n                        },\n                        \"id\": 158,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"682:19:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 159,\n                        \"name\": \"name\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 124,\n                        \"src\": \"703:4:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                          \"typeString\": \"string memory\"\n                        }\n                      ],\n                      \"id\": 155,\n                      \"name\": \"LogFundraiserCreated\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 122,\n                      \"src\": \"661:20:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (address,string memory)\"\n                      }\n                    },\n                    \"id\": 160,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"661:47:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 161,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"656:52:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 163,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"createFundraiser\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 135,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 124,\n                  \"name\": \"name\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 163,\n                  \"src\": \"245:18:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 123,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"245:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 126,\n                  \"name\": \"url\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 163,\n                  \"src\": \"273:17:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 125,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"273:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 128,\n                  \"name\": \"imageURL\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 163,\n                  \"src\": \"300:22:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 127,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"300:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 130,\n                  \"name\": \"bio\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 163,\n                  \"src\": \"332:17:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 129,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"332:6:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 132,\n                  \"name\": \"beneficiary\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 163,\n                  \"src\": \"359:27:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"typeName\": {\n                    \"id\": 131,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"359:15:1\",\n                    \"stateMutability\": \"payable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 134,\n                  \"name\": \"custodian\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 163,\n                  \"src\": \"396:17:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 133,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"396:7:1\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"235:184:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 136,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"427:0:1\"\n            },\n            \"scope\": 215,\n            \"src\": \"210:505:1\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 171,\n              \"nodeType\": \"Block\",\n              \"src\": \"779:43:1\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 168,\n                      \"name\": \"_fundraisers\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 116,\n                      \"src\": \"796:12:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_storage\",\n                        \"typeString\": \"contract Fundraiser[] storage ref\"\n                      }\n                    },\n                    \"id\": 169,\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"length\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"796:19:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 167,\n                  \"id\": 170,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"789:26:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 172,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"fundraisersCount\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 164,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"747:2:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 167,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 166,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 172,\n                  \"src\": \"770:7:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 165,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"770:7:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"769:9:1\"\n            },\n            \"scope\": 215,\n            \"src\": \"722:100:1\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 213,\n              \"nodeType\": \"Block\",\n              \"src\": \"896:200:1\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    179\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 179,\n                      \"name\": \"count\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 213,\n                      \"src\": \"906:13:1\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 178,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"906:7:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 182,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"id\": 180,\n                      \"name\": \"fundraisersCount\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 172,\n                      \"src\": \"922:16:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_view$__$returns$_t_uint256_$\",\n                        \"typeString\": \"function () view returns (uint256)\"\n                      }\n                    },\n                    \"id\": 181,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"922:18:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"906:34:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 189,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 183,\n                      \"name\": \"fs\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 176,\n                      \"src\": \"950:2:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_memory_ptr\",\n                        \"typeString\": \"contract Fundraiser[] memory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 187,\n                          \"name\": \"count\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 179,\n                          \"src\": \"972:5:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"id\": 186,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"NewExpression\",\n                        \"src\": \"955:16:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_contract$_Fundraiser_$519_$dyn_memory_$\",\n                          \"typeString\": \"function (uint256) pure returns (contract Fundraiser[] memory)\"\n                        },\n                        \"typeName\": {\n                          \"baseType\": {\n                            \"contractScope\": null,\n                            \"id\": 184,\n                            \"name\": \"Fundraiser\",\n                            \"nodeType\": \"UserDefinedTypeName\",\n                            \"referencedDeclaration\": 519,\n                            \"src\": \"959:10:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          },\n                          \"id\": 185,\n                          \"length\": null,\n                          \"nodeType\": \"ArrayTypeName\",\n                          \"src\": \"959:12:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_storage_ptr\",\n                            \"typeString\": \"contract Fundraiser[]\"\n                          }\n                        }\n                      },\n                      \"id\": 188,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"955:23:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_memory\",\n                        \"typeString\": \"contract Fundraiser[] memory\"\n                      }\n                    },\n                    \"src\": \"950:28:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_memory_ptr\",\n                      \"typeString\": \"contract Fundraiser[] memory\"\n                    }\n                  },\n                  \"id\": 190,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"950:28:1\"\n                },\n                {\n                  \"body\": {\n                    \"id\": 209,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"1023:48:1\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 207,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 201,\n                              \"name\": \"fs\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 176,\n                              \"src\": \"1037:2:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_memory_ptr\",\n                                \"typeString\": \"contract Fundraiser[] memory\"\n                              }\n                            },\n                            \"id\": 203,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 202,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 192,\n                              \"src\": \"1040:1:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"1037:5:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 204,\n                              \"name\": \"_fundraisers\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 116,\n                              \"src\": \"1045:12:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_storage\",\n                                \"typeString\": \"contract Fundraiser[] storage ref\"\n                              }\n                            },\n                            \"id\": 206,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 205,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 192,\n                              \"src\": \"1058:1:1\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"1045:15:1\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                              \"typeString\": \"contract Fundraiser\"\n                            }\n                          },\n                          \"src\": \"1037:23:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                            \"typeString\": \"contract Fundraiser\"\n                          }\n                        },\n                        \"id\": 208,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"1037:23:1\"\n                      }\n                    ]\n                  },\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 197,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 195,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 192,\n                      \"src\": \"1007:1:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 196,\n                      \"name\": \"count\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 179,\n                      \"src\": \"1011:5:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1007:9:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 210,\n                  \"initializationExpression\": {\n                    \"assignments\": [\n                      192\n                    ],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 192,\n                        \"name\": \"i\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"scope\": 210,\n                        \"src\": \"992:9:1\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 191,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"992:7:1\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 194,\n                    \"initialValue\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 193,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1004:1:1\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"992:13:1\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 199,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": false,\n                      \"src\": \"1018:3:1\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 198,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 192,\n                        \"src\": \"1018:1:1\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 200,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"1018:3:1\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"988:83:1\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 211,\n                    \"name\": \"fs\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 176,\n                    \"src\": \"1087:2:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_memory_ptr\",\n                      \"typeString\": \"contract Fundraiser[] memory\"\n                    }\n                  },\n                  \"functionReturnParameters\": 177,\n                  \"id\": 212,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1080:9:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 214,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"fundraisers\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 173,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"849:2:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 177,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 176,\n                  \"name\": \"fs\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 214,\n                  \"src\": \"872:22:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_memory_ptr\",\n                    \"typeString\": \"contract Fundraiser[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"contractScope\": null,\n                      \"id\": 174,\n                      \"name\": \"Fundraiser\",\n                      \"nodeType\": \"UserDefinedTypeName\",\n                      \"referencedDeclaration\": 519,\n                      \"src\": \"872:10:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                        \"typeString\": \"contract Fundraiser\"\n                      }\n                    },\n                    \"id\": 175,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"872:12:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_Fundraiser_$519_$dyn_storage_ptr\",\n                      \"typeString\": \"contract Fundraiser[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"871:24:1\"\n            },\n            \"scope\": 215,\n            \"src\": \"829:267:1\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          }\n        ],\n        \"scope\": 216,\n        \"src\": \"63:1035:1\"\n      }\n    ],\n    \"src\": \"0:1099:1\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.5.8+commit.23d335f2.Emscripten.clang\"\n  },\n  \"networks\": {\n    \"5777\": {\n      \"events\": {},\n      \"links\": {},\n      \"address\": \"0xB7780C9AD3ef38bb4C8B48fab37Ef176603E7787\",\n      \"transactionHash\": \"0x0e704cf19ff80ab5fcc06a4c74087f06fd0363f9120963048b05f67a9b0d7c95\"\n    }\n  },\n  \"schemaVersion\": \"3.0.10\",\n  \"updatedAt\": \"2019-09-02T16:31:37.475Z\",\n  \"devdoc\": {\n    \"methods\": {}\n  },\n  \"userdoc\": {\n    \"methods\": {}\n  }\n}"
  },
  {
    "path": "chapter-9/src/contracts/Fundraiser.json",
    "content": "{\n  \"contractName\": \"Fundraiser\",\n  \"abi\": [\n    {\n      \"constant\": false,\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"isOwner\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"url\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"imageURL\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"bio\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"beneficiary\",\n          \"type\": \"address\"\n        },\n        {\n          \"name\": \"custodian\",\n          \"type\": \"address\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"name\": \"date\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"LogDonationReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"LogWithdraw\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"name\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"beneficiary\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"url\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"imageURL\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"bio\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"totalDonations\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"conversionFactor\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"donate\",\n      \"outputs\": [],\n      \"payable\": true,\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"donationsCount\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"myDonations\",\n      \"outputs\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"uint256[]\"\n        },\n        {\n          \"name\": \"dates\",\n          \"type\": \"uint256[]\"\n        },\n        {\n          \"name\": \"conversionFactors\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [],\n      \"name\": \"withdraw\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"name\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"myDonations\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"values\\\",\\\"type\\\":\\\"uint256[]\\\"},{\\\"name\\\":\\\"dates\\\",\\\"type\\\":\\\"uint256[]\\\"},{\\\"name\\\":\\\"conversionFactors\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"donationsCount\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"beneficiary\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"withdraw\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"url\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isOwner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"imageURL\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalDonations\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"conversionFactor\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"donate\\\",\\\"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\\\":\\\"bio\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"url\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"imageURL\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"bio\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"beneficiary\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"custodian\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"name\\\":\\\"from\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"date\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"LogDonationReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"LogWithdraw\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{\\\"isOwner()\\\":{\\\"details\\\":\\\"Returns true if the caller is the current owner.\\\"},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}}},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Fundraiser.sol\\\":\\\"Fundraiser\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/randallkanna/Documents/dev/book/fundraiser/client/node_modules/@openzeppelin/contracts/ownership/Ownable.sol\\\":{\\\"keccak256\\\":\\\"0xf79fb10e8235770eb4aea7249034076a3cc9f9119ad944fc48705bae9c9d20dc\\\",\\\"urls\\\":[\\\"bzzr://d12a11272051eb6586de8f7e0a82c04a98c9984ce8b2a6cf1ee439f65aba29a9\\\"]},\\\"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Fundraiser.sol\\\":{\\\"keccak256\\\":\\\"0x19055c641f5ff96a84149a81b8950c1387518095d8ce4451b951bc03d46d5c20\\\",\\\"urls\\\":[\\\"bzzr://2b8f024402ccb06c57f6a57a77f446a65b4a98be633351a4aa39aacd8c00a355\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6080604052600060065560006007553480156200001b57600080fd5b50604051620016f6380380620016f6833981018060405260c08110156200004157600080fd5b8101908080516401000000008111156200005a57600080fd5b828101905060208101848111156200007157600080fd5b81518560018202830111640100000000821117156200008f57600080fd5b50509291906020018051640100000000811115620000ac57600080fd5b82810190506020810184811115620000c357600080fd5b8151856001820283011164010000000082111715620000e157600080fd5b50509291906020018051640100000000811115620000fe57600080fd5b828101905060208101848111156200011557600080fd5b81518560018202830111640100000000821117156200013357600080fd5b505092919060200180516401000000008111156200015057600080fd5b828101905060208101848111156200016757600080fd5b81518560018202830111640100000000821117156200018557600080fd5b50509291906020018051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a385600190805190602001906200027892919062000468565b5084600290805190602001906200029192919062000468565b508360039080519060200190620002aa92919062000468565b508260049080519060200190620002c392919062000468565b5081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000316816200032260201b60201c565b50505050505062000517565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620003aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620016d06026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004ab57805160ff1916838001178555620004dc565b82800160010185558215620004dc579182015b82811115620004db578251825591602001919060010190620004be565b5b509050620004eb9190620004ef565b5090565b6200051491905b8082111562000510576000816000905550600101620004f6565b5090565b90565b6111a980620005276000396000f3fe6080604052600436106100dd5760003560e01c80638da5cb5b1161007f578063de2ed89311610059578063de2ed893146104c4578063f14faf6f146104ef578063f2fde38b1461051d578063f516b4221461056e576100dd565b80638da5cb5b146103ae5780638f32d59b14610405578063b90497e014610434576100dd565b806338af3eed116100bb57806338af3eed146102995780633ccfd60b146102f05780635600f04f14610307578063715018a614610397576100dd565b806306fdde03146100e25780631a57f7b4146101725780631f5225951461026e575b600080fd5b3480156100ee57600080fd5b506100f76105fe565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013757808201518184015260208101905061011c565b50505050905090810190601f1680156101645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561017e57600080fd5b506101876106a0565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156101d25780820151818401526020810190506101b7565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156102145780820151818401526020810190506101f9565b50505050905001848103825285818151815260200191508051906020019060200280838360005b8381101561025657808201518184015260208101905061023b565b50505050905001965050505050505060405180910390f35b34801561027a57600080fd5b50610283610909565b6040518082815260200191505060405180910390f35b3480156102a557600080fd5b506102ae610913565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102fc57600080fd5b5061030561093d565b005b34801561031357600080fd5b5061031c610a76565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561035c578082015181840152602081019050610341565b50505050905090810190601f1680156103895780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103a357600080fd5b506103ac610b18565b005b3480156103ba57600080fd5b506103c3610c51565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041157600080fd5b5061041a610c7a565b604051808215151515815260200191505060405180910390f35b34801561044057600080fd5b50610449610cd1565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561048957808201518184015260208101905061046e565b50505050905090810190601f1680156104b65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104d057600080fd5b506104d9610d73565b6040518082815260200191505060405180910390f35b61051b6004803603602081101561050557600080fd5b8101908080359060200190929190505050610d7d565b005b34801561052957600080fd5b5061056c6004803603602081101561054057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eca565b005b34801561057a57600080fd5b50610583610f50565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105c35780820151818401526020810190506105a8565b50505050905090810190601f1680156105f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606060018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106965780601f1061066b57610100808354040283529160200191610696565b820191906000526020600020905b81548152906001019060200180831161067957829003601f168201915b5050505050905090565b60608060606000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090508060405190808252806020026020018201604052801561071b5781602001602082028038833980820191505090505b5093508060405190808252806020026020018201604052801561074d5781602001602082028038833980820191505090505b5092508060405190808252806020026020018201604052801561077f5781602001602082028038833980820191505090505b50915060008090505b818110156108f957600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081815481106107da57fe5b9060005260206000209060030201600001548582815181106107f857fe5b602002602001018181525050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061084e57fe5b90600052602060002090600302016001015484828151811061086c57fe5b602002602001018181525050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081815481106108c257fe5b9060005260206000209060030201600201548382815181106108e057fe5b6020026020010181815250508080600101915050610788565b5083838393509350935050909192565b6000600754905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610945610c7a565b6109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff16319050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a3b573d6000803e3d6000fd5b507f879a83fc17750905b8aef4ef85e6701b84a50e15d4463dc3c2e7fb0f9dbcf75d816040518082815260200191505060405180910390a150565b606060028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b610b20610c7a565b610b92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d695780601f10610d3e57610100808354040283529160200191610d69565b820191906000526020600020905b815481529060010190602001808311610d4c57829003601f168201915b5050505050905090565b6000600654905090565b610d85611136565b6040518060600160405280348152602001428152602001838152509050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505090600182039060005260206000209060030201600090919290919091506000820151816000015560208201518160010155604082015181600201555050503460066000828254019250508190555060016007600082825401925050819055507f8fa09d0d0409c35ef3a40d2e1f9f00512eedb373c85bd5b86177ba58c3a5a48e33348360200151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050565b610ed2610c7a565b610f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610f4d81610ff2565b50565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fe85780601f10610fbd57610100808354040283529160200191610fe8565b820191906000526020600020905b815481529060010190602001808311610fcb57829003601f168201915b5050505050905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611078576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806111586026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060600160405280600081526020016000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a165627a7a7230582012faf8a42a7625617a68d9b57f5b0b15d50babba6dbac248b2b4f6c83200a4a100294f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373\",\n  \"deployedBytecode\": \"0x6080604052600436106100dd5760003560e01c80638da5cb5b1161007f578063de2ed89311610059578063de2ed893146104c4578063f14faf6f146104ef578063f2fde38b1461051d578063f516b4221461056e576100dd565b80638da5cb5b146103ae5780638f32d59b14610405578063b90497e014610434576100dd565b806338af3eed116100bb57806338af3eed146102995780633ccfd60b146102f05780635600f04f14610307578063715018a614610397576100dd565b806306fdde03146100e25780631a57f7b4146101725780631f5225951461026e575b600080fd5b3480156100ee57600080fd5b506100f76105fe565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013757808201518184015260208101905061011c565b50505050905090810190601f1680156101645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561017e57600080fd5b506101876106a0565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156101d25780820151818401526020810190506101b7565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156102145780820151818401526020810190506101f9565b50505050905001848103825285818151815260200191508051906020019060200280838360005b8381101561025657808201518184015260208101905061023b565b50505050905001965050505050505060405180910390f35b34801561027a57600080fd5b50610283610909565b6040518082815260200191505060405180910390f35b3480156102a557600080fd5b506102ae610913565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102fc57600080fd5b5061030561093d565b005b34801561031357600080fd5b5061031c610a76565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561035c578082015181840152602081019050610341565b50505050905090810190601f1680156103895780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103a357600080fd5b506103ac610b18565b005b3480156103ba57600080fd5b506103c3610c51565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041157600080fd5b5061041a610c7a565b604051808215151515815260200191505060405180910390f35b34801561044057600080fd5b50610449610cd1565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561048957808201518184015260208101905061046e565b50505050905090810190601f1680156104b65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104d057600080fd5b506104d9610d73565b6040518082815260200191505060405180910390f35b61051b6004803603602081101561050557600080fd5b8101908080359060200190929190505050610d7d565b005b34801561052957600080fd5b5061056c6004803603602081101561054057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eca565b005b34801561057a57600080fd5b50610583610f50565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105c35780820151818401526020810190506105a8565b50505050905090810190601f1680156105f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606060018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106965780601f1061066b57610100808354040283529160200191610696565b820191906000526020600020905b81548152906001019060200180831161067957829003601f168201915b5050505050905090565b60608060606000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090508060405190808252806020026020018201604052801561071b5781602001602082028038833980820191505090505b5093508060405190808252806020026020018201604052801561074d5781602001602082028038833980820191505090505b5092508060405190808252806020026020018201604052801561077f5781602001602082028038833980820191505090505b50915060008090505b818110156108f957600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081815481106107da57fe5b9060005260206000209060030201600001548582815181106107f857fe5b602002602001018181525050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061084e57fe5b90600052602060002090600302016001015484828151811061086c57fe5b602002602001018181525050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081815481106108c257fe5b9060005260206000209060030201600201548382815181106108e057fe5b6020026020010181815250508080600101915050610788565b5083838393509350935050909192565b6000600754905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610945610c7a565b6109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff16319050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a3b573d6000803e3d6000fd5b507f879a83fc17750905b8aef4ef85e6701b84a50e15d4463dc3c2e7fb0f9dbcf75d816040518082815260200191505060405180910390a150565b606060028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b610b20610c7a565b610b92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d695780601f10610d3e57610100808354040283529160200191610d69565b820191906000526020600020905b815481529060010190602001808311610d4c57829003601f168201915b5050505050905090565b6000600654905090565b610d85611136565b6040518060600160405280348152602001428152602001838152509050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505090600182039060005260206000209060030201600090919290919091506000820151816000015560208201518160010155604082015181600201555050503460066000828254019250508190555060016007600082825401925050819055507f8fa09d0d0409c35ef3a40d2e1f9f00512eedb373c85bd5b86177ba58c3a5a48e33348360200151604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050565b610ed2610c7a565b610f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610f4d81610ff2565b50565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fe85780601f10610fbd57610100808354040283529160200191610fe8565b820191906000526020600020905b815481529060010190602001808311610fcb57829003601f168201915b5050505050905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611078576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806111586026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060600160405280600081526020016000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a165627a7a7230582012faf8a42a7625617a68d9b57f5b0b15d50babba6dbac248b2b4f6c83200a4a10029\",\n  \"sourceMap\": \"115:2820:2:-;;;330:1;296:35;;371:1;337:35;;656:373;8:9:-1;5:2;;;30:1;27;20:12;5:2;656:373:2;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;656:373:2;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;656:373:2;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;656:373:2;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;656:373:2;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;656:373:2;;;;;;;;;;;;;;;;;;;;;;;;;;666:10:0;657:6;;:19;;;;;;;;;;;;;;;;;;724:6;;;;;;;;;;;691:40;;720:1;691:40;;;;;;;;;;;;872:4:2;864:5;:12;;;;;;;;;;;;:::i;:::-;;893:3;886:4;:10;;;;;;;;;;;;:::i;:::-;;918:8;906:9;:20;;;;;;;;;;;;:::i;:::-;;942:3;936:4;:9;;;;;;;;;;;;:::i;:::-;;970:11;955:12;;:26;;;;;;;;;;;;;;;;;;993:29;1012:9;993:18;;;:29;;:::i;:::-;656:373;;;;;;115:2820;;2093:225:0;2186:1;2166:22;;:8;:22;;;;2158:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2275:8;2246:38;;2267:6;;;;;;;;;;;2246:38;;;;;;;;;;;;2303:8;2294:6;;:17;;;;;;;;;;;;;;;;;;2093:225;:::o;115:2820:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;\",\n  \"deployedSourceMap\": \"115:2820:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1036:80;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1036:80:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1036:80:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2113:645;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2113:645:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2113:645:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2113:645:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2113:645:2;;;;;;;;;;;;;;;;;;;;;2012:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2012:94:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1123:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1123:96:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2765:168;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2765:168:2;;;:::i;:::-;;1226:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1226:78:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1226:78:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1599:137:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1599:137:0;;;:::i;:::-;;814:77;;8:9:-1;5:2;;;30:1;27;20:12;5:2;814:77:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1165:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1165:90:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1311:88:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1311:88:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1311:88:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1491:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1491:94:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1592:413;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1592:413:2;;;;;;;;;;;;;;;;;:::i;:::-;;1885:107:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1885:107:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1885:107:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;1406:78:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1406:78:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1406:78:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1036:80;1072:13;1104:5;1097:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1036:80;:::o;2113:645::-;2165:23;2198:22;2230:34;2280:13;2296:10;:22;2307:10;2296:22;;;;;;;;;;;;;;;:29;;;;2280:45;;2358:5;2344:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;2344:20:2;;;;2335:29;;2396:5;2382:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;2382:20:2;;;;2374:28;;2446:5;2432:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;2432:20:2;;;;2412:40;;2468:9;2480:1;2468:13;;2464:237;2487:5;2483:1;:9;2464:237;;;2525:10;:22;2536:10;2525:22;;;;;;;;;;;;;;;2548:1;2525:25;;;;;;;;;;;;;;;;;;:31;;;2513:6;2520:1;2513:9;;;;;;;;;;;;;:43;;;;;2581:10;:22;2592:10;2581:22;;;;;;;;;;;;;;;2604:1;2581:25;;;;;;;;;;;;;;;;;;:30;;;2570:5;2576:1;2570:8;;;;;;;;;;;;;:41;;;;;2648:10;:22;2659:10;2648:22;;;;;;;;;;;;;;;2671:1;2648:25;;;;;;;;;;;;;;;;;;:42;;;2625:17;2643:1;2625:20;;;;;;;;;;;;;:65;;;;;2494:3;;;;;;;2464:237;;;;2718:6;2726:5;2733:17;2710:41;;;;;;;2113:645;;;:::o;2012:94::-;2058:7;2084:15;;2077:22;;2012:94;:::o;1123:96::-;1166:15;1200:12;;;;;;;;;;;1193:19;;1123:96;:::o;2765:168::-;1018:9:0;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2812:15:2;2838:4;2830:21;;;2812:39;;2861:12;;;;;;;;;;;:21;;:30;2883:7;2861:30;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2861:30:2;2906:20;2918:7;2906:20;;;;;;;;;;;;;;;;;;1074:1:0;2765:168:2:o;1226:78::-;1261:13;1293:4;1286:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1226:78;:::o;1599:137:0:-;1018:9;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1697:1;1660:40;;1681:6;;;;;;;;;;;1660:40;;;;;;;;;;;;1727:1;1710:6;;:19;;;;;;;;;;;;;;;;;;1599:137::o;814:77::-;852:7;878:6;;;;;;;;;;;871:13;;814:77;:::o;1165:90::-;1205:4;1242:6;;;;;;;;;;;1228:20;;:10;:20;;;1221:27;;1165:90;:::o;1311:88:2:-;1351:13;1383:9;1376:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1311:88;:::o;1491:94::-;1537:7;1563:15;;1556:22;;1491:94;:::o;1592:413::-;1659:24;;:::i;:::-;1686:121;;;;;;;;1716:9;1686:121;;;;1793:3;1686:121;;;;1757:16;1686:121;;;1659:148;;1819:10;:22;1830:10;1819:22;;;;;;;;;;;;;;;1847:8;1819:37;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;1819:37:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1885:9;1866:15;;:28;;;;;;;;;;;1923:1;1904:15;;:20;;;;;;;;;;;1941:57;1961:10;1973:9;1984:8;:13;;;1941:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1592:413;;:::o;1885:107:0:-;1018:9;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1957:28;1976:8;1957:18;:28::i;:::-;1885:107;:::o;1406:78:2:-;1441:13;1473:4;1466:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1406:78;:::o;2093:225:0:-;2186:1;2166:22;;:8;:22;;;;2158:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2275:8;2246:38;;2267:6;;;;;;;;;;;2246:38;;;;;;;;;;;;2303:8;2294:6;;:17;;;;;;;;;;;;;;;;;;2093:225;:::o;115:2820:2:-;;;;;;;;;;;;;;;;;;;;;;;;:::o\",\n  \"source\": \"pragma solidity >0.4.23 <0.7.0;\\n\\n import '../client/node_modules/@openzeppelin/contracts/ownership/Ownable.sol';\\n\\n contract Fundraiser is Ownable {\\n    string private _name;\\n    string private _url;\\n    string private _imageURL;\\n    string private _bio;\\n\\n     address payable _beneficiary;\\n\\n     uint256 private _totalDonations = 0;\\n    uint256 private _donationsCount = 0;\\n\\n     struct Donation {\\n        uint256 value;\\n        uint256 date;\\n        uint256 conversionFactor;\\n    }\\n    event LogDonationReceived(address from, uint256 value, uint256 date);\\n    mapping(address => Donation[]) private _donations;\\n\\n     event LogWithdraw(uint amount);\\n\\n     constructor(\\n        string memory name,\\n        string memory url,\\n        string memory imageURL,\\n        string memory bio,\\n        address payable beneficiary,\\n        address custodian) public {\\n        _name = name;\\n        _url = url;\\n        _imageURL = imageURL;\\n        _bio= bio;\\n        _beneficiary = beneficiary;\\n\\n         _transferOwnership(custodian);\\n    }\\n\\n     function name() public view returns(string memory) {\\n        return _name;\\n    }\\n\\n     function beneficiary() public view returns(address payable) {\\n        return _beneficiary;\\n    }\\n\\n     function url() public view returns(string memory) {\\n        return _url;\\n    }\\n\\n     function imageURL() public view returns(string memory) {\\n        return _imageURL;\\n    }\\n\\n     function bio() public view returns(string memory) {\\n        return _bio;\\n    }\\n\\n     function totalDonations() public view returns(uint256) {\\n        return _totalDonations;\\n    }\\n\\n     function donate(uint256 conversionFactor) public payable {\\n        Donation memory donation = Donation({\\n            value: msg.value,\\n            conversionFactor: conversionFactor,\\n            date: now\\n        });\\n\\n         _donations[msg.sender].push(donation);\\n        _totalDonations += msg.value;\\n        _donationsCount += 1;\\n\\n         emit LogDonationReceived(msg.sender, msg.value, donation.date);\\n    }\\n\\n     function donationsCount() public view returns(uint256) {\\n        return _donationsCount;\\n    }\\n\\n     function myDonations() public view returns(\\n        uint256[] memory values,\\n        uint256[] memory dates,\\n        uint256[] memory conversionFactors)\\n    {\\n        uint256 count = _donations[msg.sender].length;\\n        values = new uint256[](count);\\n        dates = new uint256[](count);\\n        conversionFactors = new uint256[](count);\\n\\n         for(uint256 i = 0; i < count; i++) {\\n            values[i] = _donations[msg.sender][i].value;\\n            dates[i] = _donations[msg.sender][i].date;\\n            conversionFactors[i] = _donations[msg.sender][i].conversionFactor;\\n        }\\n        return (values, dates, conversionFactors);\\n    }\\n\\n     function withdraw() public onlyOwner {\\n        uint256 balance = address(this).balance;\\n        _beneficiary.transfer(balance);\\n        emit LogWithdraw(balance);\\n    }\\n}\\n\",\n  \"sourcePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Fundraiser.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Fundraiser.sol\",\n    \"exportedSymbols\": {\n      \"Fundraiser\": [\n        519\n      ]\n    },\n    \"id\": 520,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 217,\n        \"literals\": [\n          \"solidity\",\n          \">\",\n          \"0.4\",\n          \".23\",\n          \"<\",\n          \"0.7\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:31:2\"\n      },\n      {\n        \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/client/node_modules/@openzeppelin/contracts/ownership/Ownable.sol\",\n        \"file\": \"../client/node_modules/@openzeppelin/contracts/ownership/Ownable.sol\",\n        \"id\": 218,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 520,\n        \"sourceUnit\": 111,\n        \"src\": \"34:78:2\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 219,\n              \"name\": \"Ownable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 110,\n              \"src\": \"138:7:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_Ownable_$110\",\n                \"typeString\": \"contract Ownable\"\n              }\n            },\n            \"id\": 220,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"138:7:2\"\n          }\n        ],\n        \"contractDependencies\": [\n          110\n        ],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 519,\n        \"linearizedBaseContracts\": [\n          519,\n          110\n        ],\n        \"name\": \"Fundraiser\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 222,\n            \"name\": \"_name\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"152:20:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 221,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"152:6:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 224,\n            \"name\": \"_url\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"178:19:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 223,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"178:6:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 226,\n            \"name\": \"_imageURL\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"203:24:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 225,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"203:6:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 228,\n            \"name\": \"_bio\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"233:19:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 227,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"233:6:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 230,\n            \"name\": \"_beneficiary\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"260:28:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address_payable\",\n              \"typeString\": \"address payable\"\n            },\n            \"typeName\": {\n              \"id\": 229,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"260:15:2\",\n              \"stateMutability\": \"payable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address_payable\",\n                \"typeString\": \"address payable\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 233,\n            \"name\": \"_totalDonations\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"296:35:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 231,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"296:7:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"30\",\n              \"id\": 232,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"330:1:2\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_rational_0_by_1\",\n                \"typeString\": \"int_const 0\"\n              },\n              \"value\": \"0\"\n            },\n            \"visibility\": \"private\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 236,\n            \"name\": \"_donationsCount\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"337:35:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 234,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"337:7:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"30\",\n              \"id\": 235,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"371:1:2\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_rational_0_by_1\",\n                \"typeString\": \"int_const 0\"\n              },\n              \"value\": \"0\"\n            },\n            \"visibility\": \"private\"\n          },\n          {\n            \"canonicalName\": \"Fundraiser.Donation\",\n            \"id\": 243,\n            \"members\": [\n              {\n                \"constant\": false,\n                \"id\": 238,\n                \"name\": \"value\",\n                \"nodeType\": \"VariableDeclaration\",\n                \"scope\": 243,\n                \"src\": \"406:13:2\",\n                \"stateVariable\": false,\n                \"storageLocation\": \"default\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_uint256\",\n                  \"typeString\": \"uint256\"\n                },\n                \"typeName\": {\n                  \"id\": 237,\n                  \"name\": \"uint256\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"406:7:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  }\n                },\n                \"value\": null,\n                \"visibility\": \"internal\"\n              },\n              {\n                \"constant\": false,\n                \"id\": 240,\n                \"name\": \"date\",\n                \"nodeType\": \"VariableDeclaration\",\n                \"scope\": 243,\n                \"src\": \"429:12:2\",\n                \"stateVariable\": false,\n                \"storageLocation\": \"default\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_uint256\",\n                  \"typeString\": \"uint256\"\n                },\n                \"typeName\": {\n                  \"id\": 239,\n                  \"name\": \"uint256\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"429:7:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  }\n                },\n                \"value\": null,\n                \"visibility\": \"internal\"\n              },\n              {\n                \"constant\": false,\n                \"id\": 242,\n                \"name\": \"conversionFactor\",\n                \"nodeType\": \"VariableDeclaration\",\n                \"scope\": 243,\n                \"src\": \"451:24:2\",\n                \"stateVariable\": false,\n                \"storageLocation\": \"default\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_uint256\",\n                  \"typeString\": \"uint256\"\n                },\n                \"typeName\": {\n                  \"id\": 241,\n                  \"name\": \"uint256\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"451:7:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  }\n                },\n                \"value\": null,\n                \"visibility\": \"internal\"\n              }\n            ],\n            \"name\": \"Donation\",\n            \"nodeType\": \"StructDefinition\",\n            \"scope\": 519,\n            \"src\": \"380:102:2\",\n            \"visibility\": \"public\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 251,\n            \"name\": \"LogDonationReceived\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 250,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 245,\n                  \"indexed\": false,\n                  \"name\": \"from\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 251,\n                  \"src\": \"513:12:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 244,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"513:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 247,\n                  \"indexed\": false,\n                  \"name\": \"value\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 251,\n                  \"src\": \"527:13:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 246,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"527:7:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 249,\n                  \"indexed\": false,\n                  \"name\": \"date\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 251,\n                  \"src\": \"542:12:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 248,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"542:7:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"512:43:2\"\n            },\n            \"src\": \"487:69:2\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 256,\n            \"name\": \"_donations\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"561:49:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$243_storage_$dyn_storage_$\",\n              \"typeString\": \"mapping(address => struct Fundraiser.Donation[])\"\n            },\n            \"typeName\": {\n              \"id\": 255,\n              \"keyType\": {\n                \"id\": 252,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"569:7:2\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"561:30:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$243_storage_$dyn_storage_$\",\n                \"typeString\": \"mapping(address => struct Fundraiser.Donation[])\"\n              },\n              \"valueType\": {\n                \"baseType\": {\n                  \"contractScope\": null,\n                  \"id\": 253,\n                  \"name\": \"Donation\",\n                  \"nodeType\": \"UserDefinedTypeName\",\n                  \"referencedDeclaration\": 243,\n                  \"src\": \"580:8:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_struct$_Donation_$243_storage_ptr\",\n                    \"typeString\": \"struct Fundraiser.Donation\"\n                  }\n                },\n                \"id\": 254,\n                \"length\": null,\n                \"nodeType\": \"ArrayTypeName\",\n                \"src\": \"580:10:2\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_array$_t_struct$_Donation_$243_storage_$dyn_storage_ptr\",\n                  \"typeString\": \"struct Fundraiser.Donation[]\"\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 260,\n            \"name\": \"LogWithdraw\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 259,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 258,\n                  \"indexed\": false,\n                  \"name\": \"amount\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 260,\n                  \"src\": \"636:11:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 257,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"636:4:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"635:13:2\"\n            },\n            \"src\": \"618:31:2\"\n          },\n          {\n            \"body\": {\n              \"id\": 299,\n              \"nodeType\": \"Block\",\n              \"src\": \"854:175:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 277,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 275,\n                      \"name\": \"_name\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 222,\n                      \"src\": \"864:5:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 276,\n                      \"name\": \"name\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 262,\n                      \"src\": \"872:4:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"864:12:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 278,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"864:12:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 281,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 279,\n                      \"name\": \"_url\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 224,\n                      \"src\": \"886:4:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 280,\n                      \"name\": \"url\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 264,\n                      \"src\": \"893:3:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"886:10:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 282,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"886:10:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 285,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 283,\n                      \"name\": \"_imageURL\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 226,\n                      \"src\": \"906:9:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 284,\n                      \"name\": \"imageURL\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 266,\n                      \"src\": \"918:8:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"906:20:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 286,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"906:20:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 289,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 287,\n                      \"name\": \"_bio\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 228,\n                      \"src\": \"936:4:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 288,\n                      \"name\": \"bio\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 268,\n                      \"src\": \"942:3:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"936:9:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 290,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"936:9:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 293,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 291,\n                      \"name\": \"_beneficiary\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 230,\n                      \"src\": \"955:12:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 292,\n                      \"name\": \"beneficiary\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 270,\n                      \"src\": \"970:11:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"955:26:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"id\": 294,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"955:26:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 296,\n                        \"name\": \"custodian\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 272,\n                        \"src\": \"1012:9:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 295,\n                      \"name\": \"_transferOwnership\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 109,\n                      \"src\": \"993:18:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address)\"\n                      }\n                    },\n                    \"id\": 297,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"993:29:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 298,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"993:29:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 300,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 273,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 262,\n                  \"name\": \"name\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 300,\n                  \"src\": \"677:18:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 261,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"677:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 264,\n                  \"name\": \"url\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 300,\n                  \"src\": \"705:17:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 263,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"705:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 266,\n                  \"name\": \"imageURL\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 300,\n                  \"src\": \"732:22:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 265,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"732:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 268,\n                  \"name\": \"bio\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 300,\n                  \"src\": \"764:17:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 267,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"764:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 270,\n                  \"name\": \"beneficiary\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 300,\n                  \"src\": \"791:27:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"typeName\": {\n                    \"id\": 269,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"791:15:2\",\n                    \"stateMutability\": \"payable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 272,\n                  \"name\": \"custodian\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 300,\n                  \"src\": \"828:17:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 271,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"828:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"667:179:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 274,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"854:0:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"656:373:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 307,\n              \"nodeType\": \"Block\",\n              \"src\": \"1087:29:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 305,\n                    \"name\": \"_name\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 222,\n                    \"src\": \"1104:5:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"functionReturnParameters\": 304,\n                  \"id\": 306,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1097:12:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 308,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"name\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 301,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1049:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 304,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 303,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 308,\n                  \"src\": \"1072:13:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 302,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1072:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1071:15:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"1036:80:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 315,\n              \"nodeType\": \"Block\",\n              \"src\": \"1183:36:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 313,\n                    \"name\": \"_beneficiary\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 230,\n                    \"src\": \"1200:12:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"functionReturnParameters\": 312,\n                  \"id\": 314,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1193:19:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 316,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"beneficiary\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 309,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1143:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 312,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 311,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 316,\n                  \"src\": \"1166:15:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"typeName\": {\n                    \"id\": 310,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1166:15:2\",\n                    \"stateMutability\": \"payable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1165:17:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"1123:96:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 323,\n              \"nodeType\": \"Block\",\n              \"src\": \"1276:28:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 321,\n                    \"name\": \"_url\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 224,\n                    \"src\": \"1293:4:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"functionReturnParameters\": 320,\n                  \"id\": 322,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1286:11:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 324,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"url\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 317,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1238:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 320,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 319,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 324,\n                  \"src\": \"1261:13:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 318,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1261:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1260:15:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"1226:78:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 331,\n              \"nodeType\": \"Block\",\n              \"src\": \"1366:33:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 329,\n                    \"name\": \"_imageURL\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 226,\n                    \"src\": \"1383:9:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"functionReturnParameters\": 328,\n                  \"id\": 330,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1376:16:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 332,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"imageURL\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 325,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1328:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 328,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 327,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 332,\n                  \"src\": \"1351:13:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 326,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1351:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1350:15:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"1311:88:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 339,\n              \"nodeType\": \"Block\",\n              \"src\": \"1456:28:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 337,\n                    \"name\": \"_bio\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 228,\n                    \"src\": \"1473:4:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"functionReturnParameters\": 336,\n                  \"id\": 338,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1466:11:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 340,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"bio\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 333,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1418:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 336,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 335,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 340,\n                  \"src\": \"1441:13:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 334,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1441:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1440:15:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"1406:78:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 347,\n              \"nodeType\": \"Block\",\n              \"src\": \"1546:39:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 345,\n                    \"name\": \"_totalDonations\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 233,\n                    \"src\": \"1563:15:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 344,\n                  \"id\": 346,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1556:22:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 348,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"totalDonations\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 341,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1514:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 344,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 343,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 348,\n                  \"src\": \"1537:7:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 342,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1537:7:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1536:9:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"1491:94:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 388,\n              \"nodeType\": \"Block\",\n              \"src\": \"1649:356:2\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    354\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 354,\n                      \"name\": \"donation\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 388,\n                      \"src\": \"1659:24:2\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"memory\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_struct$_Donation_$243_memory_ptr\",\n                        \"typeString\": \"struct Fundraiser.Donation\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 353,\n                        \"name\": \"Donation\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 243,\n                        \"src\": \"1659:8:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_struct$_Donation_$243_storage_ptr\",\n                          \"typeString\": \"struct Fundraiser.Donation\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 361,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 356,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 614,\n                          \"src\": \"1716:3:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 357,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"value\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1716:9:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 358,\n                        \"name\": \"conversionFactor\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 350,\n                        \"src\": \"1757:16:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 359,\n                        \"name\": \"now\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 616,\n                        \"src\": \"1793:3:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 355,\n                      \"name\": \"Donation\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 243,\n                      \"src\": \"1686:8:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_struct$_Donation_$243_storage_ptr_$\",\n                        \"typeString\": \"type(struct Fundraiser.Donation storage pointer)\"\n                      }\n                    },\n                    \"id\": 360,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"structConstructorCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [\n                      \"value\",\n                      \"conversionFactor\",\n                      \"date\"\n                    ],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1686:121:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_struct$_Donation_$243_memory\",\n                      \"typeString\": \"struct Fundraiser.Donation memory\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1659:148:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 367,\n                        \"name\": \"donation\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 354,\n                        \"src\": \"1847:8:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_struct$_Donation_$243_memory_ptr\",\n                          \"typeString\": \"struct Fundraiser.Donation memory\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_struct$_Donation_$243_memory_ptr\",\n                          \"typeString\": \"struct Fundraiser.Donation memory\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"baseExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 362,\n                          \"name\": \"_donations\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 256,\n                          \"src\": \"1819:10:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$243_storage_$dyn_storage_$\",\n                            \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                          }\n                        },\n                        \"id\": 365,\n                        \"indexExpression\": {\n                          \"argumentTypes\": null,\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 363,\n                            \"name\": \"msg\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 614,\n                            \"src\": \"1830:3:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_message\",\n                              \"typeString\": \"msg\"\n                            }\n                          },\n                          \"id\": 364,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"sender\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"1830:10:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"isConstant\": false,\n                        \"isLValue\": true,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"IndexAccess\",\n                        \"src\": \"1819:22:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_struct$_Donation_$243_storage_$dyn_storage\",\n                          \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                        }\n                      },\n                      \"id\": 366,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"push\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"1819:27:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_struct$_Donation_$243_storage_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (struct Fundraiser.Donation storage ref) returns (uint256)\"\n                      }\n                    },\n                    \"id\": 368,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1819:37:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 369,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1819:37:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 373,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 370,\n                      \"name\": \"_totalDonations\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 233,\n                      \"src\": \"1866:15:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"+=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 371,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 614,\n                        \"src\": \"1885:3:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 372,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"value\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"1885:9:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1866:28:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 374,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1866:28:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 377,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 375,\n                      \"name\": \"_donationsCount\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 236,\n                      \"src\": \"1904:15:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"+=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31\",\n                      \"id\": 376,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1923:1:2\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1_by_1\",\n                        \"typeString\": \"int_const 1\"\n                      },\n                      \"value\": \"1\"\n                    },\n                    \"src\": \"1904:20:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 378,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1904:20:2\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 380,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 614,\n                          \"src\": \"1961:3:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 381,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"sender\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1961:10:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 382,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 614,\n                          \"src\": \"1973:3:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 383,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"value\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1973:9:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 384,\n                          \"name\": \"donation\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 354,\n                          \"src\": \"1984:8:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_struct$_Donation_$243_memory_ptr\",\n                            \"typeString\": \"struct Fundraiser.Donation memory\"\n                          }\n                        },\n                        \"id\": 385,\n                        \"isConstant\": false,\n                        \"isLValue\": true,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"date\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 240,\n                        \"src\": \"1984:13:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 379,\n                      \"name\": \"LogDonationReceived\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 251,\n                      \"src\": \"1941:19:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (address,uint256,uint256)\"\n                      }\n                    },\n                    \"id\": 386,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1941:57:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 387,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"1936:62:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 389,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"donate\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 351,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 350,\n                  \"name\": \"conversionFactor\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 389,\n                  \"src\": \"1608:24:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 349,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1608:7:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1607:26:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 352,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1649:0:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"1592:413:2\",\n            \"stateMutability\": \"payable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 396,\n              \"nodeType\": \"Block\",\n              \"src\": \"2067:39:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 394,\n                    \"name\": \"_donationsCount\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 236,\n                    \"src\": \"2084:15:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 393,\n                  \"id\": 395,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2077:22:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 397,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"donationsCount\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 390,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2035:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 393,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 392,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 397,\n                  \"src\": \"2058:7:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 391,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2058:7:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2057:9:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"2012:94:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 494,\n              \"nodeType\": \"Block\",\n              \"src\": \"2270:488:2\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    410\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 410,\n                      \"name\": \"count\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 494,\n                      \"src\": \"2280:13:2\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 409,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2280:7:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 416,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 411,\n                        \"name\": \"_donations\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 256,\n                        \"src\": \"2296:10:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$243_storage_$dyn_storage_$\",\n                          \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                        }\n                      },\n                      \"id\": 414,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 412,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 614,\n                          \"src\": \"2307:3:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 413,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"sender\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"2307:10:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"2296:22:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_struct$_Donation_$243_storage_$dyn_storage\",\n                        \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                      }\n                    },\n                    \"id\": 415,\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"length\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"2296:29:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2280:45:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 423,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 417,\n                      \"name\": \"values\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 401,\n                      \"src\": \"2335:6:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 421,\n                          \"name\": \"count\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 410,\n                          \"src\": \"2358:5:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"id\": 420,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"NewExpression\",\n                        \"src\": \"2344:13:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                          \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                        },\n                        \"typeName\": {\n                          \"baseType\": {\n                            \"id\": 418,\n                            \"name\": \"uint256\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"2348:7:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 419,\n                          \"length\": null,\n                          \"nodeType\": \"ArrayTypeName\",\n                          \"src\": \"2348:9:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                            \"typeString\": \"uint256[]\"\n                          }\n                        }\n                      },\n                      \"id\": 422,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2344:20:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"src\": \"2335:29:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                      \"typeString\": \"uint256[] memory\"\n                    }\n                  },\n                  \"id\": 424,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2335:29:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 431,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 425,\n                      \"name\": \"dates\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 404,\n                      \"src\": \"2374:5:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 429,\n                          \"name\": \"count\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 410,\n                          \"src\": \"2396:5:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"id\": 428,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"NewExpression\",\n                        \"src\": \"2382:13:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                          \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                        },\n                        \"typeName\": {\n                          \"baseType\": {\n                            \"id\": 426,\n                            \"name\": \"uint256\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"2386:7:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 427,\n                          \"length\": null,\n                          \"nodeType\": \"ArrayTypeName\",\n                          \"src\": \"2386:9:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                            \"typeString\": \"uint256[]\"\n                          }\n                        }\n                      },\n                      \"id\": 430,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2382:20:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"src\": \"2374:28:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                      \"typeString\": \"uint256[] memory\"\n                    }\n                  },\n                  \"id\": 432,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2374:28:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 439,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 433,\n                      \"name\": \"conversionFactors\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 407,\n                      \"src\": \"2412:17:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 437,\n                          \"name\": \"count\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 410,\n                          \"src\": \"2446:5:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"id\": 436,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"NewExpression\",\n                        \"src\": \"2432:13:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                          \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                        },\n                        \"typeName\": {\n                          \"baseType\": {\n                            \"id\": 434,\n                            \"name\": \"uint256\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"2436:7:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 435,\n                          \"length\": null,\n                          \"nodeType\": \"ArrayTypeName\",\n                          \"src\": \"2436:9:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                            \"typeString\": \"uint256[]\"\n                          }\n                        }\n                      },\n                      \"id\": 438,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2432:20:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"src\": \"2412:40:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                      \"typeString\": \"uint256[] memory\"\n                    }\n                  },\n                  \"id\": 440,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2412:40:2\"\n                },\n                {\n                  \"body\": {\n                    \"id\": 487,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"2499:202:2\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 461,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 451,\n                              \"name\": \"values\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 401,\n                              \"src\": \"2513:6:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                \"typeString\": \"uint256[] memory\"\n                              }\n                            },\n                            \"id\": 453,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 452,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 442,\n                              \"src\": \"2520:1:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2513:9:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"baseExpression\": {\n                                \"argumentTypes\": null,\n                                \"baseExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 454,\n                                  \"name\": \"_donations\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 256,\n                                  \"src\": \"2525:10:2\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$243_storage_$dyn_storage_$\",\n                                    \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                                  }\n                                },\n                                \"id\": 457,\n                                \"indexExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 455,\n                                    \"name\": \"msg\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 614,\n                                    \"src\": \"2536:3:2\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_magic_message\",\n                                      \"typeString\": \"msg\"\n                                    }\n                                  },\n                                  \"id\": 456,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"sender\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": null,\n                                  \"src\": \"2536:10:2\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address_payable\",\n                                    \"typeString\": \"address payable\"\n                                  }\n                                },\n                                \"isConstant\": false,\n                                \"isLValue\": true,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"IndexAccess\",\n                                \"src\": \"2525:22:2\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_array$_t_struct$_Donation_$243_storage_$dyn_storage\",\n                                  \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                                }\n                              },\n                              \"id\": 459,\n                              \"indexExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 458,\n                                \"name\": \"i\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 442,\n                                \"src\": \"2548:1:2\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"IndexAccess\",\n                              \"src\": \"2525:25:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_struct$_Donation_$243_storage\",\n                                \"typeString\": \"struct Fundraiser.Donation storage ref\"\n                              }\n                            },\n                            \"id\": 460,\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"value\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 238,\n                            \"src\": \"2525:31:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"2513:43:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 462,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"2513:43:2\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 473,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 463,\n                              \"name\": \"dates\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 404,\n                              \"src\": \"2570:5:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                \"typeString\": \"uint256[] memory\"\n                              }\n                            },\n                            \"id\": 465,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 464,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 442,\n                              \"src\": \"2576:1:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2570:8:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"baseExpression\": {\n                                \"argumentTypes\": null,\n                                \"baseExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 466,\n                                  \"name\": \"_donations\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 256,\n                                  \"src\": \"2581:10:2\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$243_storage_$dyn_storage_$\",\n                                    \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                                  }\n                                },\n                                \"id\": 469,\n                                \"indexExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 467,\n                                    \"name\": \"msg\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 614,\n                                    \"src\": \"2592:3:2\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_magic_message\",\n                                      \"typeString\": \"msg\"\n                                    }\n                                  },\n                                  \"id\": 468,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"sender\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": null,\n                                  \"src\": \"2592:10:2\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address_payable\",\n                                    \"typeString\": \"address payable\"\n                                  }\n                                },\n                                \"isConstant\": false,\n                                \"isLValue\": true,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"IndexAccess\",\n                                \"src\": \"2581:22:2\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_array$_t_struct$_Donation_$243_storage_$dyn_storage\",\n                                  \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                                }\n                              },\n                              \"id\": 471,\n                              \"indexExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 470,\n                                \"name\": \"i\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 442,\n                                \"src\": \"2604:1:2\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"IndexAccess\",\n                              \"src\": \"2581:25:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_struct$_Donation_$243_storage\",\n                                \"typeString\": \"struct Fundraiser.Donation storage ref\"\n                              }\n                            },\n                            \"id\": 472,\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"date\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 240,\n                            \"src\": \"2581:30:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"2570:41:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 474,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"2570:41:2\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 485,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 475,\n                              \"name\": \"conversionFactors\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 407,\n                              \"src\": \"2625:17:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                \"typeString\": \"uint256[] memory\"\n                              }\n                            },\n                            \"id\": 477,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 476,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 442,\n                              \"src\": \"2643:1:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2625:20:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"baseExpression\": {\n                                \"argumentTypes\": null,\n                                \"baseExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 478,\n                                  \"name\": \"_donations\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 256,\n                                  \"src\": \"2648:10:2\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$243_storage_$dyn_storage_$\",\n                                    \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                                  }\n                                },\n                                \"id\": 481,\n                                \"indexExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 479,\n                                    \"name\": \"msg\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 614,\n                                    \"src\": \"2659:3:2\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_magic_message\",\n                                      \"typeString\": \"msg\"\n                                    }\n                                  },\n                                  \"id\": 480,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"sender\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": null,\n                                  \"src\": \"2659:10:2\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address_payable\",\n                                    \"typeString\": \"address payable\"\n                                  }\n                                },\n                                \"isConstant\": false,\n                                \"isLValue\": true,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"IndexAccess\",\n                                \"src\": \"2648:22:2\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_array$_t_struct$_Donation_$243_storage_$dyn_storage\",\n                                  \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                                }\n                              },\n                              \"id\": 483,\n                              \"indexExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 482,\n                                \"name\": \"i\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 442,\n                                \"src\": \"2671:1:2\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"IndexAccess\",\n                              \"src\": \"2648:25:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_struct$_Donation_$243_storage\",\n                                \"typeString\": \"struct Fundraiser.Donation storage ref\"\n                              }\n                            },\n                            \"id\": 484,\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"conversionFactor\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 242,\n                            \"src\": \"2648:42:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"2625:65:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 486,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"2625:65:2\"\n                      }\n                    ]\n                  },\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 447,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 445,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 442,\n                      \"src\": \"2483:1:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 446,\n                      \"name\": \"count\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 410,\n                      \"src\": \"2487:5:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"2483:9:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 488,\n                  \"initializationExpression\": {\n                    \"assignments\": [\n                      442\n                    ],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 442,\n                        \"name\": \"i\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"scope\": 488,\n                        \"src\": \"2468:9:2\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 441,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"2468:7:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 444,\n                    \"initialValue\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 443,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"2480:1:2\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"2468:13:2\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 449,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": false,\n                      \"src\": \"2494:3:2\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 448,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 442,\n                        \"src\": \"2494:1:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 450,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"2494:3:2\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"2464:237:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"components\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 489,\n                        \"name\": \"values\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 401,\n                        \"src\": \"2718:6:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                          \"typeString\": \"uint256[] memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 490,\n                        \"name\": \"dates\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 404,\n                        \"src\": \"2726:5:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                          \"typeString\": \"uint256[] memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 491,\n                        \"name\": \"conversionFactors\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 407,\n                        \"src\": \"2733:17:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                          \"typeString\": \"uint256[] memory\"\n                        }\n                      }\n                    ],\n                    \"id\": 492,\n                    \"isConstant\": false,\n                    \"isInlineArray\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"TupleExpression\",\n                    \"src\": \"2717:34:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$\",\n                      \"typeString\": \"tuple(uint256[] memory,uint256[] memory,uint256[] memory)\"\n                    }\n                  },\n                  \"functionReturnParameters\": 408,\n                  \"id\": 493,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2710:41:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 495,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"myDonations\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 398,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2133:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 408,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 401,\n                  \"name\": \"values\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 495,\n                  \"src\": \"2165:23:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                    \"typeString\": \"uint256[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 399,\n                      \"name\": \"uint256\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"2165:7:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 400,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"2165:9:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                      \"typeString\": \"uint256[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 404,\n                  \"name\": \"dates\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 495,\n                  \"src\": \"2198:22:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                    \"typeString\": \"uint256[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 402,\n                      \"name\": \"uint256\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"2198:7:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 403,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"2198:9:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                      \"typeString\": \"uint256[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 407,\n                  \"name\": \"conversionFactors\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 495,\n                  \"src\": \"2230:34:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                    \"typeString\": \"uint256[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 405,\n                      \"name\": \"uint256\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"2230:7:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 406,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"2230:9:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                      \"typeString\": \"uint256[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2155:110:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"2113:645:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 517,\n              \"nodeType\": \"Block\",\n              \"src\": \"2802:131:2\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    501\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 501,\n                      \"name\": \"balance\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 517,\n                      \"src\": \"2812:15:2\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 500,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2812:7:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 506,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 503,\n                          \"name\": \"this\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 630,\n                          \"src\": \"2838:4:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                            \"typeString\": \"contract Fundraiser\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                            \"typeString\": \"contract Fundraiser\"\n                          }\n                        ],\n                        \"id\": 502,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"2830:7:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": \"address\"\n                      },\n                      \"id\": 504,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2830:13:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"id\": 505,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"balance\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"2830:21:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2812:39:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 510,\n                        \"name\": \"balance\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 501,\n                        \"src\": \"2883:7:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 507,\n                        \"name\": \"_beneficiary\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 230,\n                        \"src\": \"2861:12:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      \"id\": 509,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"transfer\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"2861:21:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_transfer_nonpayable$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (uint256)\"\n                      }\n                    },\n                    \"id\": 511,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2861:30:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 512,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2861:30:2\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 514,\n                        \"name\": \"balance\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 501,\n                        \"src\": \"2918:7:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 513,\n                      \"name\": \"LogWithdraw\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 260,\n                      \"src\": \"2906:11:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (uint256)\"\n                      }\n                    },\n                    \"id\": 515,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2906:20:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 516,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"2901:25:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 518,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 498,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 497,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 43,\n                  \"src\": \"2792:9:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"2792:9:2\"\n              }\n            ],\n            \"name\": \"withdraw\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 496,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2782:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 499,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2802:0:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"2765:168:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          }\n        ],\n        \"scope\": 520,\n        \"src\": \"115:2820:2\"\n      }\n    ],\n    \"src\": \"0:2936:2\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Fundraiser.sol\",\n    \"exportedSymbols\": {\n      \"Fundraiser\": [\n        519\n      ]\n    },\n    \"id\": 520,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 217,\n        \"literals\": [\n          \"solidity\",\n          \">\",\n          \"0.4\",\n          \".23\",\n          \"<\",\n          \"0.7\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:31:2\"\n      },\n      {\n        \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/client/node_modules/@openzeppelin/contracts/ownership/Ownable.sol\",\n        \"file\": \"../client/node_modules/@openzeppelin/contracts/ownership/Ownable.sol\",\n        \"id\": 218,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 520,\n        \"sourceUnit\": 111,\n        \"src\": \"34:78:2\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 219,\n              \"name\": \"Ownable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 110,\n              \"src\": \"138:7:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_Ownable_$110\",\n                \"typeString\": \"contract Ownable\"\n              }\n            },\n            \"id\": 220,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"138:7:2\"\n          }\n        ],\n        \"contractDependencies\": [\n          110\n        ],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 519,\n        \"linearizedBaseContracts\": [\n          519,\n          110\n        ],\n        \"name\": \"Fundraiser\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 222,\n            \"name\": \"_name\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"152:20:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 221,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"152:6:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 224,\n            \"name\": \"_url\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"178:19:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 223,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"178:6:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 226,\n            \"name\": \"_imageURL\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"203:24:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 225,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"203:6:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 228,\n            \"name\": \"_bio\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"233:19:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_string_storage\",\n              \"typeString\": \"string\"\n            },\n            \"typeName\": {\n              \"id\": 227,\n              \"name\": \"string\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"233:6:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_string_storage_ptr\",\n                \"typeString\": \"string\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 230,\n            \"name\": \"_beneficiary\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"260:28:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address_payable\",\n              \"typeString\": \"address payable\"\n            },\n            \"typeName\": {\n              \"id\": 229,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"260:15:2\",\n              \"stateMutability\": \"payable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address_payable\",\n                \"typeString\": \"address payable\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 233,\n            \"name\": \"_totalDonations\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"296:35:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 231,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"296:7:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"30\",\n              \"id\": 232,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"330:1:2\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_rational_0_by_1\",\n                \"typeString\": \"int_const 0\"\n              },\n              \"value\": \"0\"\n            },\n            \"visibility\": \"private\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 236,\n            \"name\": \"_donationsCount\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"337:35:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 234,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"337:7:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"30\",\n              \"id\": 235,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"371:1:2\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_rational_0_by_1\",\n                \"typeString\": \"int_const 0\"\n              },\n              \"value\": \"0\"\n            },\n            \"visibility\": \"private\"\n          },\n          {\n            \"canonicalName\": \"Fundraiser.Donation\",\n            \"id\": 243,\n            \"members\": [\n              {\n                \"constant\": false,\n                \"id\": 238,\n                \"name\": \"value\",\n                \"nodeType\": \"VariableDeclaration\",\n                \"scope\": 243,\n                \"src\": \"406:13:2\",\n                \"stateVariable\": false,\n                \"storageLocation\": \"default\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_uint256\",\n                  \"typeString\": \"uint256\"\n                },\n                \"typeName\": {\n                  \"id\": 237,\n                  \"name\": \"uint256\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"406:7:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  }\n                },\n                \"value\": null,\n                \"visibility\": \"internal\"\n              },\n              {\n                \"constant\": false,\n                \"id\": 240,\n                \"name\": \"date\",\n                \"nodeType\": \"VariableDeclaration\",\n                \"scope\": 243,\n                \"src\": \"429:12:2\",\n                \"stateVariable\": false,\n                \"storageLocation\": \"default\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_uint256\",\n                  \"typeString\": \"uint256\"\n                },\n                \"typeName\": {\n                  \"id\": 239,\n                  \"name\": \"uint256\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"429:7:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  }\n                },\n                \"value\": null,\n                \"visibility\": \"internal\"\n              },\n              {\n                \"constant\": false,\n                \"id\": 242,\n                \"name\": \"conversionFactor\",\n                \"nodeType\": \"VariableDeclaration\",\n                \"scope\": 243,\n                \"src\": \"451:24:2\",\n                \"stateVariable\": false,\n                \"storageLocation\": \"default\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_uint256\",\n                  \"typeString\": \"uint256\"\n                },\n                \"typeName\": {\n                  \"id\": 241,\n                  \"name\": \"uint256\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"451:7:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  }\n                },\n                \"value\": null,\n                \"visibility\": \"internal\"\n              }\n            ],\n            \"name\": \"Donation\",\n            \"nodeType\": \"StructDefinition\",\n            \"scope\": 519,\n            \"src\": \"380:102:2\",\n            \"visibility\": \"public\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 251,\n            \"name\": \"LogDonationReceived\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 250,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 245,\n                  \"indexed\": false,\n                  \"name\": \"from\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 251,\n                  \"src\": \"513:12:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 244,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"513:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 247,\n                  \"indexed\": false,\n                  \"name\": \"value\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 251,\n                  \"src\": \"527:13:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 246,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"527:7:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 249,\n                  \"indexed\": false,\n                  \"name\": \"date\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 251,\n                  \"src\": \"542:12:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 248,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"542:7:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"512:43:2\"\n            },\n            \"src\": \"487:69:2\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 256,\n            \"name\": \"_donations\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 519,\n            \"src\": \"561:49:2\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$243_storage_$dyn_storage_$\",\n              \"typeString\": \"mapping(address => struct Fundraiser.Donation[])\"\n            },\n            \"typeName\": {\n              \"id\": 255,\n              \"keyType\": {\n                \"id\": 252,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"569:7:2\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"561:30:2\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$243_storage_$dyn_storage_$\",\n                \"typeString\": \"mapping(address => struct Fundraiser.Donation[])\"\n              },\n              \"valueType\": {\n                \"baseType\": {\n                  \"contractScope\": null,\n                  \"id\": 253,\n                  \"name\": \"Donation\",\n                  \"nodeType\": \"UserDefinedTypeName\",\n                  \"referencedDeclaration\": 243,\n                  \"src\": \"580:8:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_struct$_Donation_$243_storage_ptr\",\n                    \"typeString\": \"struct Fundraiser.Donation\"\n                  }\n                },\n                \"id\": 254,\n                \"length\": null,\n                \"nodeType\": \"ArrayTypeName\",\n                \"src\": \"580:10:2\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_array$_t_struct$_Donation_$243_storage_$dyn_storage_ptr\",\n                  \"typeString\": \"struct Fundraiser.Donation[]\"\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"private\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": null,\n            \"id\": 260,\n            \"name\": \"LogWithdraw\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 259,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 258,\n                  \"indexed\": false,\n                  \"name\": \"amount\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 260,\n                  \"src\": \"636:11:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 257,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"636:4:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"635:13:2\"\n            },\n            \"src\": \"618:31:2\"\n          },\n          {\n            \"body\": {\n              \"id\": 299,\n              \"nodeType\": \"Block\",\n              \"src\": \"854:175:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 277,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 275,\n                      \"name\": \"_name\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 222,\n                      \"src\": \"864:5:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 276,\n                      \"name\": \"name\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 262,\n                      \"src\": \"872:4:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"864:12:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 278,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"864:12:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 281,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 279,\n                      \"name\": \"_url\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 224,\n                      \"src\": \"886:4:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 280,\n                      \"name\": \"url\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 264,\n                      \"src\": \"893:3:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"886:10:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 282,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"886:10:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 285,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 283,\n                      \"name\": \"_imageURL\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 226,\n                      \"src\": \"906:9:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 284,\n                      \"name\": \"imageURL\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 266,\n                      \"src\": \"918:8:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"906:20:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 286,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"906:20:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 289,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 287,\n                      \"name\": \"_bio\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 228,\n                      \"src\": \"936:4:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_storage\",\n                        \"typeString\": \"string storage ref\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 288,\n                      \"name\": \"bio\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 268,\n                      \"src\": \"942:3:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                        \"typeString\": \"string memory\"\n                      }\n                    },\n                    \"src\": \"936:9:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"id\": 290,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"936:9:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 293,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 291,\n                      \"name\": \"_beneficiary\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 230,\n                      \"src\": \"955:12:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 292,\n                      \"name\": \"beneficiary\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 270,\n                      \"src\": \"970:11:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"955:26:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"id\": 294,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"955:26:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 296,\n                        \"name\": \"custodian\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 272,\n                        \"src\": \"1012:9:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 295,\n                      \"name\": \"_transferOwnership\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 109,\n                      \"src\": \"993:18:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address)\"\n                      }\n                    },\n                    \"id\": 297,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"993:29:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 298,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"993:29:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 300,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 273,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 262,\n                  \"name\": \"name\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 300,\n                  \"src\": \"677:18:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 261,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"677:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 264,\n                  \"name\": \"url\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 300,\n                  \"src\": \"705:17:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 263,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"705:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 266,\n                  \"name\": \"imageURL\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 300,\n                  \"src\": \"732:22:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 265,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"732:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 268,\n                  \"name\": \"bio\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 300,\n                  \"src\": \"764:17:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 267,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"764:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 270,\n                  \"name\": \"beneficiary\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 300,\n                  \"src\": \"791:27:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"typeName\": {\n                    \"id\": 269,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"791:15:2\",\n                    \"stateMutability\": \"payable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 272,\n                  \"name\": \"custodian\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 300,\n                  \"src\": \"828:17:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 271,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"828:7:2\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"667:179:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 274,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"854:0:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"656:373:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 307,\n              \"nodeType\": \"Block\",\n              \"src\": \"1087:29:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 305,\n                    \"name\": \"_name\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 222,\n                    \"src\": \"1104:5:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"functionReturnParameters\": 304,\n                  \"id\": 306,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1097:12:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 308,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"name\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 301,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1049:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 304,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 303,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 308,\n                  \"src\": \"1072:13:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 302,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1072:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1071:15:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"1036:80:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 315,\n              \"nodeType\": \"Block\",\n              \"src\": \"1183:36:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 313,\n                    \"name\": \"_beneficiary\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 230,\n                    \"src\": \"1200:12:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"functionReturnParameters\": 312,\n                  \"id\": 314,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1193:19:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 316,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"beneficiary\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 309,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1143:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 312,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 311,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 316,\n                  \"src\": \"1166:15:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"typeName\": {\n                    \"id\": 310,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1166:15:2\",\n                    \"stateMutability\": \"payable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address_payable\",\n                      \"typeString\": \"address payable\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1165:17:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"1123:96:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 323,\n              \"nodeType\": \"Block\",\n              \"src\": \"1276:28:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 321,\n                    \"name\": \"_url\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 224,\n                    \"src\": \"1293:4:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"functionReturnParameters\": 320,\n                  \"id\": 322,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1286:11:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 324,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"url\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 317,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1238:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 320,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 319,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 324,\n                  \"src\": \"1261:13:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 318,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1261:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1260:15:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"1226:78:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 331,\n              \"nodeType\": \"Block\",\n              \"src\": \"1366:33:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 329,\n                    \"name\": \"_imageURL\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 226,\n                    \"src\": \"1383:9:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"functionReturnParameters\": 328,\n                  \"id\": 330,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1376:16:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 332,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"imageURL\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 325,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1328:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 328,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 327,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 332,\n                  \"src\": \"1351:13:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 326,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1351:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1350:15:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"1311:88:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 339,\n              \"nodeType\": \"Block\",\n              \"src\": \"1456:28:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 337,\n                    \"name\": \"_bio\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 228,\n                    \"src\": \"1473:4:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage\",\n                      \"typeString\": \"string storage ref\"\n                    }\n                  },\n                  \"functionReturnParameters\": 336,\n                  \"id\": 338,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1466:11:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 340,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"bio\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 333,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1418:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 336,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 335,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 340,\n                  \"src\": \"1441:13:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 334,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1441:6:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1440:15:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"1406:78:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 347,\n              \"nodeType\": \"Block\",\n              \"src\": \"1546:39:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 345,\n                    \"name\": \"_totalDonations\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 233,\n                    \"src\": \"1563:15:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 344,\n                  \"id\": 346,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1556:22:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 348,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"totalDonations\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 341,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1514:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 344,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 343,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 348,\n                  \"src\": \"1537:7:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 342,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1537:7:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1536:9:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"1491:94:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 388,\n              \"nodeType\": \"Block\",\n              \"src\": \"1649:356:2\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    354\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 354,\n                      \"name\": \"donation\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 388,\n                      \"src\": \"1659:24:2\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"memory\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_struct$_Donation_$243_memory_ptr\",\n                        \"typeString\": \"struct Fundraiser.Donation\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 353,\n                        \"name\": \"Donation\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 243,\n                        \"src\": \"1659:8:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_struct$_Donation_$243_storage_ptr\",\n                          \"typeString\": \"struct Fundraiser.Donation\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 361,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 356,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 614,\n                          \"src\": \"1716:3:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 357,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"value\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1716:9:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 358,\n                        \"name\": \"conversionFactor\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 350,\n                        \"src\": \"1757:16:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 359,\n                        \"name\": \"now\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 616,\n                        \"src\": \"1793:3:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 355,\n                      \"name\": \"Donation\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 243,\n                      \"src\": \"1686:8:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_struct$_Donation_$243_storage_ptr_$\",\n                        \"typeString\": \"type(struct Fundraiser.Donation storage pointer)\"\n                      }\n                    },\n                    \"id\": 360,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"structConstructorCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [\n                      \"value\",\n                      \"conversionFactor\",\n                      \"date\"\n                    ],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1686:121:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_struct$_Donation_$243_memory\",\n                      \"typeString\": \"struct Fundraiser.Donation memory\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1659:148:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 367,\n                        \"name\": \"donation\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 354,\n                        \"src\": \"1847:8:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_struct$_Donation_$243_memory_ptr\",\n                          \"typeString\": \"struct Fundraiser.Donation memory\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_struct$_Donation_$243_memory_ptr\",\n                          \"typeString\": \"struct Fundraiser.Donation memory\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"baseExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 362,\n                          \"name\": \"_donations\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 256,\n                          \"src\": \"1819:10:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$243_storage_$dyn_storage_$\",\n                            \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                          }\n                        },\n                        \"id\": 365,\n                        \"indexExpression\": {\n                          \"argumentTypes\": null,\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 363,\n                            \"name\": \"msg\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 614,\n                            \"src\": \"1830:3:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_message\",\n                              \"typeString\": \"msg\"\n                            }\n                          },\n                          \"id\": 364,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"sender\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"1830:10:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"isConstant\": false,\n                        \"isLValue\": true,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"IndexAccess\",\n                        \"src\": \"1819:22:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_struct$_Donation_$243_storage_$dyn_storage\",\n                          \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                        }\n                      },\n                      \"id\": 366,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"push\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"1819:27:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_struct$_Donation_$243_storage_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (struct Fundraiser.Donation storage ref) returns (uint256)\"\n                      }\n                    },\n                    \"id\": 368,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1819:37:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 369,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1819:37:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 373,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 370,\n                      \"name\": \"_totalDonations\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 233,\n                      \"src\": \"1866:15:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"+=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 371,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 614,\n                        \"src\": \"1885:3:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 372,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"value\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"1885:9:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1866:28:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 374,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1866:28:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 377,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 375,\n                      \"name\": \"_donationsCount\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 236,\n                      \"src\": \"1904:15:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"+=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31\",\n                      \"id\": 376,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1923:1:2\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1_by_1\",\n                        \"typeString\": \"int_const 1\"\n                      },\n                      \"value\": \"1\"\n                    },\n                    \"src\": \"1904:20:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 378,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1904:20:2\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 380,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 614,\n                          \"src\": \"1961:3:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 381,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"sender\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1961:10:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 382,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 614,\n                          \"src\": \"1973:3:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 383,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"value\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"1973:9:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 384,\n                          \"name\": \"donation\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 354,\n                          \"src\": \"1984:8:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_struct$_Donation_$243_memory_ptr\",\n                            \"typeString\": \"struct Fundraiser.Donation memory\"\n                          }\n                        },\n                        \"id\": 385,\n                        \"isConstant\": false,\n                        \"isLValue\": true,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"date\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 240,\n                        \"src\": \"1984:13:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 379,\n                      \"name\": \"LogDonationReceived\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 251,\n                      \"src\": \"1941:19:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (address,uint256,uint256)\"\n                      }\n                    },\n                    \"id\": 386,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1941:57:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 387,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"1936:62:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 389,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"donate\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 351,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 350,\n                  \"name\": \"conversionFactor\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 389,\n                  \"src\": \"1608:24:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 349,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1608:7:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1607:26:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 352,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1649:0:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"1592:413:2\",\n            \"stateMutability\": \"payable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 396,\n              \"nodeType\": \"Block\",\n              \"src\": \"2067:39:2\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 394,\n                    \"name\": \"_donationsCount\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 236,\n                    \"src\": \"2084:15:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 393,\n                  \"id\": 395,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2077:22:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 397,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"donationsCount\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 390,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2035:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 393,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 392,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 397,\n                  \"src\": \"2058:7:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 391,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2058:7:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2057:9:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"2012:94:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 494,\n              \"nodeType\": \"Block\",\n              \"src\": \"2270:488:2\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    410\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 410,\n                      \"name\": \"count\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 494,\n                      \"src\": \"2280:13:2\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 409,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2280:7:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 416,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 411,\n                        \"name\": \"_donations\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 256,\n                        \"src\": \"2296:10:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$243_storage_$dyn_storage_$\",\n                          \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                        }\n                      },\n                      \"id\": 414,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 412,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 614,\n                          \"src\": \"2307:3:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 413,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"sender\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"2307:10:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"2296:22:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_struct$_Donation_$243_storage_$dyn_storage\",\n                        \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                      }\n                    },\n                    \"id\": 415,\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"length\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"2296:29:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2280:45:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 423,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 417,\n                      \"name\": \"values\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 401,\n                      \"src\": \"2335:6:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 421,\n                          \"name\": \"count\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 410,\n                          \"src\": \"2358:5:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"id\": 420,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"NewExpression\",\n                        \"src\": \"2344:13:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                          \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                        },\n                        \"typeName\": {\n                          \"baseType\": {\n                            \"id\": 418,\n                            \"name\": \"uint256\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"2348:7:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 419,\n                          \"length\": null,\n                          \"nodeType\": \"ArrayTypeName\",\n                          \"src\": \"2348:9:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                            \"typeString\": \"uint256[]\"\n                          }\n                        }\n                      },\n                      \"id\": 422,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2344:20:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"src\": \"2335:29:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                      \"typeString\": \"uint256[] memory\"\n                    }\n                  },\n                  \"id\": 424,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2335:29:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 431,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 425,\n                      \"name\": \"dates\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 404,\n                      \"src\": \"2374:5:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 429,\n                          \"name\": \"count\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 410,\n                          \"src\": \"2396:5:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"id\": 428,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"NewExpression\",\n                        \"src\": \"2382:13:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                          \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                        },\n                        \"typeName\": {\n                          \"baseType\": {\n                            \"id\": 426,\n                            \"name\": \"uint256\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"2386:7:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 427,\n                          \"length\": null,\n                          \"nodeType\": \"ArrayTypeName\",\n                          \"src\": \"2386:9:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                            \"typeString\": \"uint256[]\"\n                          }\n                        }\n                      },\n                      \"id\": 430,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2382:20:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"src\": \"2374:28:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                      \"typeString\": \"uint256[] memory\"\n                    }\n                  },\n                  \"id\": 432,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2374:28:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 439,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 433,\n                      \"name\": \"conversionFactors\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 407,\n                      \"src\": \"2412:17:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 437,\n                          \"name\": \"count\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 410,\n                          \"src\": \"2446:5:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"id\": 436,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"NewExpression\",\n                        \"src\": \"2432:13:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$\",\n                          \"typeString\": \"function (uint256) pure returns (uint256[] memory)\"\n                        },\n                        \"typeName\": {\n                          \"baseType\": {\n                            \"id\": 434,\n                            \"name\": \"uint256\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"2436:7:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 435,\n                          \"length\": null,\n                          \"nodeType\": \"ArrayTypeName\",\n                          \"src\": \"2436:9:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                            \"typeString\": \"uint256[]\"\n                          }\n                        }\n                      },\n                      \"id\": 438,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2432:20:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory\",\n                        \"typeString\": \"uint256[] memory\"\n                      }\n                    },\n                    \"src\": \"2412:40:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                      \"typeString\": \"uint256[] memory\"\n                    }\n                  },\n                  \"id\": 440,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2412:40:2\"\n                },\n                {\n                  \"body\": {\n                    \"id\": 487,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"2499:202:2\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 461,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 451,\n                              \"name\": \"values\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 401,\n                              \"src\": \"2513:6:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                \"typeString\": \"uint256[] memory\"\n                              }\n                            },\n                            \"id\": 453,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 452,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 442,\n                              \"src\": \"2520:1:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2513:9:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"baseExpression\": {\n                                \"argumentTypes\": null,\n                                \"baseExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 454,\n                                  \"name\": \"_donations\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 256,\n                                  \"src\": \"2525:10:2\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$243_storage_$dyn_storage_$\",\n                                    \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                                  }\n                                },\n                                \"id\": 457,\n                                \"indexExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 455,\n                                    \"name\": \"msg\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 614,\n                                    \"src\": \"2536:3:2\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_magic_message\",\n                                      \"typeString\": \"msg\"\n                                    }\n                                  },\n                                  \"id\": 456,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"sender\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": null,\n                                  \"src\": \"2536:10:2\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address_payable\",\n                                    \"typeString\": \"address payable\"\n                                  }\n                                },\n                                \"isConstant\": false,\n                                \"isLValue\": true,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"IndexAccess\",\n                                \"src\": \"2525:22:2\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_array$_t_struct$_Donation_$243_storage_$dyn_storage\",\n                                  \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                                }\n                              },\n                              \"id\": 459,\n                              \"indexExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 458,\n                                \"name\": \"i\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 442,\n                                \"src\": \"2548:1:2\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"IndexAccess\",\n                              \"src\": \"2525:25:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_struct$_Donation_$243_storage\",\n                                \"typeString\": \"struct Fundraiser.Donation storage ref\"\n                              }\n                            },\n                            \"id\": 460,\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"value\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 238,\n                            \"src\": \"2525:31:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"2513:43:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 462,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"2513:43:2\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 473,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 463,\n                              \"name\": \"dates\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 404,\n                              \"src\": \"2570:5:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                \"typeString\": \"uint256[] memory\"\n                              }\n                            },\n                            \"id\": 465,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 464,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 442,\n                              \"src\": \"2576:1:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2570:8:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"baseExpression\": {\n                                \"argumentTypes\": null,\n                                \"baseExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 466,\n                                  \"name\": \"_donations\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 256,\n                                  \"src\": \"2581:10:2\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$243_storage_$dyn_storage_$\",\n                                    \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                                  }\n                                },\n                                \"id\": 469,\n                                \"indexExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 467,\n                                    \"name\": \"msg\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 614,\n                                    \"src\": \"2592:3:2\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_magic_message\",\n                                      \"typeString\": \"msg\"\n                                    }\n                                  },\n                                  \"id\": 468,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"sender\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": null,\n                                  \"src\": \"2592:10:2\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address_payable\",\n                                    \"typeString\": \"address payable\"\n                                  }\n                                },\n                                \"isConstant\": false,\n                                \"isLValue\": true,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"IndexAccess\",\n                                \"src\": \"2581:22:2\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_array$_t_struct$_Donation_$243_storage_$dyn_storage\",\n                                  \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                                }\n                              },\n                              \"id\": 471,\n                              \"indexExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 470,\n                                \"name\": \"i\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 442,\n                                \"src\": \"2604:1:2\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"IndexAccess\",\n                              \"src\": \"2581:25:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_struct$_Donation_$243_storage\",\n                                \"typeString\": \"struct Fundraiser.Donation storage ref\"\n                              }\n                            },\n                            \"id\": 472,\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"date\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 240,\n                            \"src\": \"2581:30:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"2570:41:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 474,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"2570:41:2\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 485,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 475,\n                              \"name\": \"conversionFactors\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 407,\n                              \"src\": \"2625:17:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                                \"typeString\": \"uint256[] memory\"\n                              }\n                            },\n                            \"id\": 477,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 476,\n                              \"name\": \"i\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 442,\n                              \"src\": \"2643:1:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2625:20:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"baseExpression\": {\n                                \"argumentTypes\": null,\n                                \"baseExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 478,\n                                  \"name\": \"_donations\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 256,\n                                  \"src\": \"2648:10:2\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_struct$_Donation_$243_storage_$dyn_storage_$\",\n                                    \"typeString\": \"mapping(address => struct Fundraiser.Donation storage ref[] storage ref)\"\n                                  }\n                                },\n                                \"id\": 481,\n                                \"indexExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 479,\n                                    \"name\": \"msg\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 614,\n                                    \"src\": \"2659:3:2\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_magic_message\",\n                                      \"typeString\": \"msg\"\n                                    }\n                                  },\n                                  \"id\": 480,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"sender\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": null,\n                                  \"src\": \"2659:10:2\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address_payable\",\n                                    \"typeString\": \"address payable\"\n                                  }\n                                },\n                                \"isConstant\": false,\n                                \"isLValue\": true,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"IndexAccess\",\n                                \"src\": \"2648:22:2\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_array$_t_struct$_Donation_$243_storage_$dyn_storage\",\n                                  \"typeString\": \"struct Fundraiser.Donation storage ref[] storage ref\"\n                                }\n                              },\n                              \"id\": 483,\n                              \"indexExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 482,\n                                \"name\": \"i\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 442,\n                                \"src\": \"2671:1:2\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"IndexAccess\",\n                              \"src\": \"2648:25:2\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_struct$_Donation_$243_storage\",\n                                \"typeString\": \"struct Fundraiser.Donation storage ref\"\n                              }\n                            },\n                            \"id\": 484,\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"conversionFactor\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 242,\n                            \"src\": \"2648:42:2\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"2625:65:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 486,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"2625:65:2\"\n                      }\n                    ]\n                  },\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 447,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 445,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 442,\n                      \"src\": \"2483:1:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 446,\n                      \"name\": \"count\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 410,\n                      \"src\": \"2487:5:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"2483:9:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 488,\n                  \"initializationExpression\": {\n                    \"assignments\": [\n                      442\n                    ],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 442,\n                        \"name\": \"i\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"scope\": 488,\n                        \"src\": \"2468:9:2\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 441,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"2468:7:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 444,\n                    \"initialValue\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 443,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"2480:1:2\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"2468:13:2\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 449,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": false,\n                      \"src\": \"2494:3:2\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 448,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 442,\n                        \"src\": \"2494:1:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 450,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"2494:3:2\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"2464:237:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"components\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 489,\n                        \"name\": \"values\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 401,\n                        \"src\": \"2718:6:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                          \"typeString\": \"uint256[] memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 490,\n                        \"name\": \"dates\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 404,\n                        \"src\": \"2726:5:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                          \"typeString\": \"uint256[] memory\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 491,\n                        \"name\": \"conversionFactors\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 407,\n                        \"src\": \"2733:17:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                          \"typeString\": \"uint256[] memory\"\n                        }\n                      }\n                    ],\n                    \"id\": 492,\n                    \"isConstant\": false,\n                    \"isInlineArray\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"TupleExpression\",\n                    \"src\": \"2717:34:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$\",\n                      \"typeString\": \"tuple(uint256[] memory,uint256[] memory,uint256[] memory)\"\n                    }\n                  },\n                  \"functionReturnParameters\": 408,\n                  \"id\": 493,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2710:41:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 495,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"myDonations\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 398,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2133:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 408,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 401,\n                  \"name\": \"values\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 495,\n                  \"src\": \"2165:23:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                    \"typeString\": \"uint256[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 399,\n                      \"name\": \"uint256\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"2165:7:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 400,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"2165:9:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                      \"typeString\": \"uint256[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 404,\n                  \"name\": \"dates\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 495,\n                  \"src\": \"2198:22:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                    \"typeString\": \"uint256[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 402,\n                      \"name\": \"uint256\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"2198:7:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 403,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"2198:9:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                      \"typeString\": \"uint256[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 407,\n                  \"name\": \"conversionFactors\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 495,\n                  \"src\": \"2230:34:2\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_uint256_$dyn_memory_ptr\",\n                    \"typeString\": \"uint256[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 405,\n                      \"name\": \"uint256\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"2230:7:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 406,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"2230:9:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_uint256_$dyn_storage_ptr\",\n                      \"typeString\": \"uint256[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2155:110:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"2113:645:2\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 517,\n              \"nodeType\": \"Block\",\n              \"src\": \"2802:131:2\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    501\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 501,\n                      \"name\": \"balance\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 517,\n                      \"src\": \"2812:15:2\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 500,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2812:7:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 506,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 503,\n                          \"name\": \"this\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 630,\n                          \"src\": \"2838:4:2\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                            \"typeString\": \"contract Fundraiser\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_Fundraiser_$519\",\n                            \"typeString\": \"contract Fundraiser\"\n                          }\n                        ],\n                        \"id\": 502,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"2830:7:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": \"address\"\n                      },\n                      \"id\": 504,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2830:13:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"id\": 505,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"balance\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"2830:21:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2812:39:2\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 510,\n                        \"name\": \"balance\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 501,\n                        \"src\": \"2883:7:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 507,\n                        \"name\": \"_beneficiary\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 230,\n                        \"src\": \"2861:12:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      \"id\": 509,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"transfer\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"2861:21:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_transfer_nonpayable$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (uint256)\"\n                      }\n                    },\n                    \"id\": 511,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2861:30:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 512,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2861:30:2\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 514,\n                        \"name\": \"balance\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 501,\n                        \"src\": \"2918:7:2\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 513,\n                      \"name\": \"LogWithdraw\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 260,\n                      \"src\": \"2906:11:2\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (uint256)\"\n                      }\n                    },\n                    \"id\": 515,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2906:20:2\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 516,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"2901:25:2\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 518,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 498,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 497,\n                  \"name\": \"onlyOwner\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 43,\n                  \"src\": \"2792:9:2\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"2792:9:2\"\n              }\n            ],\n            \"name\": \"withdraw\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 496,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2782:2:2\"\n            },\n            \"returnParameters\": {\n              \"id\": 499,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2802:0:2\"\n            },\n            \"scope\": 519,\n            \"src\": \"2765:168:2\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          }\n        ],\n        \"scope\": 520,\n        \"src\": \"115:2820:2\"\n      }\n    ],\n    \"src\": \"0:2936:2\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.5.8+commit.23d335f2.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.0.10\",\n  \"updatedAt\": \"2019-08-31T03:47:25.117Z\",\n  \"devdoc\": {\n    \"methods\": {\n      \"isOwner()\": {\n        \"details\": \"Returns true if the caller is the current owner.\"\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    }\n  },\n  \"userdoc\": {\n    \"methods\": {}\n  }\n}"
  },
  {
    "path": "chapter-9/src/contracts/Migrations.json",
    "content": "{\n  \"contractName\": \"Migrations\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"last_completed_migration\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"completed\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setCompleted\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"new_address\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"upgrade\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"new_address\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"upgrade\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"last_completed_migration\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"completed\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setCompleted\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{}},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Migrations.sol\\\":\\\"Migrations\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Migrations.sol\\\":{\\\"keccak256\\\":\\\"0xf65fcb01f4b8ef6909f55bccf7f05ab483d953e671e205d9ce8ea6a9adc3c653\\\",\\\"urls\\\":[\\\"bzzr://ea0687984a75ca6b8aa89a3ba439fa3123a53421a5b5474320c74ad1174583fc\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102ae806100606000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630900f01014610051578063445df0ac146100955780638da5cb5b146100b3578063fdacd576146100fd575b600080fd5b6100936004803603602081101561006757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061012b565b005b61009d6101f7565b6040518082815260200191505060405180910390f35b6100bb6101fd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101296004803603602081101561011357600080fd5b8101908080359060200190929190505050610222565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101f45760008190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156101da57600080fd5b505af11580156101ee573d6000803e3d6000fd5b50505050505b50565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561027f57806001819055505b5056fea165627a7a723058209a683952b1b10080d406704c878cca7c812b021f40b0f93fed7e6a8a4f697c4f0029\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80630900f01014610051578063445df0ac146100955780638da5cb5b146100b3578063fdacd576146100fd575b600080fd5b6100936004803603602081101561006757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061012b565b005b61009d6101f7565b6040518082815260200191505060405180910390f35b6100bb6101fd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101296004803603602081101561011357600080fd5b8101908080359060200190929190505050610222565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101f45760008190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156101da57600080fd5b505af11580156101ee573d6000803e3d6000fd5b50505050505b50565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561027f57806001819055505b5056fea165627a7a723058209a683952b1b10080d406704c878cca7c812b021f40b0f93fed7e6a8a4f697c4f0029\",\n  \"sourceMap\": \"25:480:0:-;;;177:50;8:9:-1;5:2;;;30:1;27;20:12;5:2;177:50:0;212:10;204:5;;:18;;;;;;;;;;;;;;;;;;25:480;;;;;;\",\n  \"deployedSourceMap\": \"25:480:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25:480:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;338:165;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;338:165:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;73:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;231:103;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;231:103:0;;;;;;;;;;;;;;;;;:::i;:::-;;338:165;160:5;;;;;;;;;;;146:19;;:10;:19;;;142:26;;;400:19;433:11;400:45;;451:8;:21;;;473:24;;451:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;451:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;451:47:0;;;;167:1;142:26;338:165;:::o;73:36::-;;;;:::o;49:20::-;;;;;;;;;;;;;:::o;231:103::-;160:5;;;;;;;;;;;146:19;;:10;:19;;;142:26;;;320:9;293:24;:36;;;;142:26;231:103;:::o\",\n  \"source\": \"pragma solidity ^0.5.0;\\n\\ncontract Migrations {\\n  address public owner;\\n  uint public last_completed_migration;\\n\\n  modifier restricted() {\\n    if (msg.sender == owner) _;\\n  }\\n\\n  constructor() public {\\n    owner = msg.sender;\\n  }\\n\\n  function setCompleted(uint completed) public restricted {\\n    last_completed_migration = completed;\\n  }\\n\\n  function upgrade(address new_address) public restricted {\\n    Migrations upgraded = Migrations(new_address);\\n    upgraded.setCompleted(last_completed_migration);\\n  }\\n}\\n\",\n  \"sourcePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Migrations.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Migrations.sol\",\n    \"exportedSymbols\": {\n      \"Migrations\": [\n        56\n      ]\n    },\n    \"id\": 57,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 1,\n        \"literals\": [\n          \"solidity\",\n          \"^\",\n          \"0.5\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:0\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 56,\n        \"linearizedBaseContracts\": [\n          56\n        ],\n        \"name\": \"Migrations\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 3,\n            \"name\": \"owner\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 56,\n            \"src\": \"49:20:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 2,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"49:7:0\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 5,\n            \"name\": \"last_completed_migration\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 56,\n            \"src\": \"73:36:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 4,\n              \"name\": \"uint\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"73:4:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 13,\n              \"nodeType\": \"Block\",\n              \"src\": \"136:37:0\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 10,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 94,\n                        \"src\": \"146:3:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 8,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"146:10:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9,\n                      \"name\": \"owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 3,\n                      \"src\": \"160:5:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"146:19:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 12,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"142:26:0\",\n                  \"trueBody\": {\n                    \"id\": 11,\n                    \"nodeType\": \"PlaceholderStatement\",\n                    \"src\": \"167:1:0\"\n                  }\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 14,\n            \"name\": \"restricted\",\n            \"nodeType\": \"ModifierDefinition\",\n            \"parameters\": {\n              \"id\": 6,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"133:2:0\"\n            },\n            \"src\": \"114:59:0\",\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 22,\n              \"nodeType\": \"Block\",\n              \"src\": \"198:29:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 20,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 17,\n                      \"name\": \"owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 3,\n                      \"src\": \"204:5:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 18,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 94,\n                        \"src\": \"212:3:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 19,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"212:10:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"204:18:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 21,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"204:18:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 23,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 15,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"188:2:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 16,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"198:0:0\"\n            },\n            \"scope\": 56,\n            \"src\": \"177:50:0\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 34,\n              \"nodeType\": \"Block\",\n              \"src\": \"287:47:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 32,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 30,\n                      \"name\": \"last_completed_migration\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 5,\n                      \"src\": \"293:24:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 31,\n                      \"name\": \"completed\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 25,\n                      \"src\": \"320:9:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"293:36:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 33,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"293:36:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 35,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 28,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 27,\n                  \"name\": \"restricted\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 14,\n                  \"src\": \"276:10:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"276:10:0\"\n              }\n            ],\n            \"name\": \"setCompleted\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 26,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 25,\n                  \"name\": \"completed\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 35,\n                  \"src\": \"253:14:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 24,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"253:4:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"252:16:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 29,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"287:0:0\"\n            },\n            \"scope\": 56,\n            \"src\": \"231:103:0\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 54,\n              \"nodeType\": \"Block\",\n              \"src\": \"394:109:0\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    43\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 43,\n                      \"name\": \"upgraded\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 54,\n                      \"src\": \"400:19:0\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Migrations_$56\",\n                        \"typeString\": \"contract Migrations\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 42,\n                        \"name\": \"Migrations\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 56,\n                        \"src\": \"400:10:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Migrations_$56\",\n                          \"typeString\": \"contract Migrations\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 47,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 45,\n                        \"name\": \"new_address\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 37,\n                        \"src\": \"433:11:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 44,\n                      \"name\": \"Migrations\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 56,\n                      \"src\": \"422:10:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_contract$_Migrations_$56_$\",\n                        \"typeString\": \"type(contract Migrations)\"\n                      }\n                    },\n                    \"id\": 46,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"422:23:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Migrations_$56\",\n                      \"typeString\": \"contract Migrations\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"400:45:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 51,\n                        \"name\": \"last_completed_migration\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5,\n                        \"src\": \"473:24:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 48,\n                        \"name\": \"upgraded\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 43,\n                        \"src\": \"451:8:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Migrations_$56\",\n                          \"typeString\": \"contract Migrations\"\n                        }\n                      },\n                      \"id\": 50,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"setCompleted\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 35,\n                      \"src\": \"451:21:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_nonpayable$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (uint256) external\"\n                      }\n                    },\n                    \"id\": 52,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"451:47:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 53,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"451:47:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 55,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 40,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 39,\n                  \"name\": \"restricted\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 14,\n                  \"src\": \"383:10:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"383:10:0\"\n              }\n            ],\n            \"name\": \"upgrade\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 38,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 37,\n                  \"name\": \"new_address\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 55,\n                  \"src\": \"355:19:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 36,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"355:7:0\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"354:21:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 41,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"394:0:0\"\n            },\n            \"scope\": 56,\n            \"src\": \"338:165:0\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          }\n        ],\n        \"scope\": 57,\n        \"src\": \"25:480:0\"\n      }\n    ],\n    \"src\": \"0:506:0\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/Migrations.sol\",\n    \"exportedSymbols\": {\n      \"Migrations\": [\n        56\n      ]\n    },\n    \"id\": 57,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 1,\n        \"literals\": [\n          \"solidity\",\n          \"^\",\n          \"0.5\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:0\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 56,\n        \"linearizedBaseContracts\": [\n          56\n        ],\n        \"name\": \"Migrations\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 3,\n            \"name\": \"owner\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 56,\n            \"src\": \"49:20:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 2,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"49:7:0\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"id\": 5,\n            \"name\": \"last_completed_migration\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 56,\n            \"src\": \"73:36:0\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 4,\n              \"name\": \"uint\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"73:4:0\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 13,\n              \"nodeType\": \"Block\",\n              \"src\": \"136:37:0\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 10,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 94,\n                        \"src\": \"146:3:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 8,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"146:10:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9,\n                      \"name\": \"owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 3,\n                      \"src\": \"160:5:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"146:19:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 12,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"142:26:0\",\n                  \"trueBody\": {\n                    \"id\": 11,\n                    \"nodeType\": \"PlaceholderStatement\",\n                    \"src\": \"167:1:0\"\n                  }\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 14,\n            \"name\": \"restricted\",\n            \"nodeType\": \"ModifierDefinition\",\n            \"parameters\": {\n              \"id\": 6,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"133:2:0\"\n            },\n            \"src\": \"114:59:0\",\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 22,\n              \"nodeType\": \"Block\",\n              \"src\": \"198:29:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 20,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 17,\n                      \"name\": \"owner\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 3,\n                      \"src\": \"204:5:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 18,\n                        \"name\": \"msg\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 94,\n                        \"src\": \"212:3:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_magic_message\",\n                          \"typeString\": \"msg\"\n                        }\n                      },\n                      \"id\": 19,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"sender\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"212:10:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"204:18:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 21,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"204:18:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 23,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 15,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"188:2:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 16,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"198:0:0\"\n            },\n            \"scope\": 56,\n            \"src\": \"177:50:0\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 34,\n              \"nodeType\": \"Block\",\n              \"src\": \"287:47:0\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 32,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 30,\n                      \"name\": \"last_completed_migration\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 5,\n                      \"src\": \"293:24:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 31,\n                      \"name\": \"completed\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 25,\n                      \"src\": \"320:9:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"293:36:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 33,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"293:36:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 35,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 28,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 27,\n                  \"name\": \"restricted\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 14,\n                  \"src\": \"276:10:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"276:10:0\"\n              }\n            ],\n            \"name\": \"setCompleted\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 26,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 25,\n                  \"name\": \"completed\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 35,\n                  \"src\": \"253:14:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 24,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"253:4:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"252:16:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 29,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"287:0:0\"\n            },\n            \"scope\": 56,\n            \"src\": \"231:103:0\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 54,\n              \"nodeType\": \"Block\",\n              \"src\": \"394:109:0\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    43\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 43,\n                      \"name\": \"upgraded\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 54,\n                      \"src\": \"400:19:0\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Migrations_$56\",\n                        \"typeString\": \"contract Migrations\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 42,\n                        \"name\": \"Migrations\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 56,\n                        \"src\": \"400:10:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Migrations_$56\",\n                          \"typeString\": \"contract Migrations\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 47,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 45,\n                        \"name\": \"new_address\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 37,\n                        \"src\": \"433:11:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 44,\n                      \"name\": \"Migrations\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 56,\n                      \"src\": \"422:10:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_contract$_Migrations_$56_$\",\n                        \"typeString\": \"type(contract Migrations)\"\n                      }\n                    },\n                    \"id\": 46,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"422:23:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Migrations_$56\",\n                      \"typeString\": \"contract Migrations\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"400:45:0\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 51,\n                        \"name\": \"last_completed_migration\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5,\n                        \"src\": \"473:24:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 48,\n                        \"name\": \"upgraded\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 43,\n                        \"src\": \"451:8:0\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Migrations_$56\",\n                          \"typeString\": \"contract Migrations\"\n                        }\n                      },\n                      \"id\": 50,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"setCompleted\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 35,\n                      \"src\": \"451:21:0\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_nonpayable$_t_uint256_$returns$__$\",\n                        \"typeString\": \"function (uint256) external\"\n                      }\n                    },\n                    \"id\": 52,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"451:47:0\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 53,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"451:47:0\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 55,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 40,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 39,\n                  \"name\": \"restricted\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 14,\n                  \"src\": \"383:10:0\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"383:10:0\"\n              }\n            ],\n            \"name\": \"upgrade\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 38,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 37,\n                  \"name\": \"new_address\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 55,\n                  \"src\": \"355:19:0\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 36,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"355:7:0\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"354:21:0\"\n            },\n            \"returnParameters\": {\n              \"id\": 41,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"394:0:0\"\n            },\n            \"scope\": 56,\n            \"src\": \"338:165:0\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          }\n        ],\n        \"scope\": 57,\n        \"src\": \"25:480:0\"\n      }\n    ],\n    \"src\": \"0:506:0\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.5.8+commit.23d335f2.Emscripten.clang\"\n  },\n  \"networks\": {\n    \"5777\": {\n      \"events\": {},\n      \"links\": {},\n      \"address\": \"0x6Af651D4c6E9f32a627381BFC771a82C882B1E8C\",\n      \"transactionHash\": \"0xf04ee2a0c62330e7a051148d4660de6441abd817caf695a3943c5b2af9b3397e\"\n    }\n  },\n  \"schemaVersion\": \"3.0.10\",\n  \"updatedAt\": \"2019-09-02T16:31:37.476Z\",\n  \"devdoc\": {\n    \"methods\": {}\n  },\n  \"userdoc\": {\n    \"methods\": {}\n  }\n}"
  },
  {
    "path": "chapter-9/src/contracts/SimpleStorage.json",
    "content": "{\n  \"contractName\": \"SimpleStorage\",\n  \"abi\": [\n    {\n      \"constant\": false,\n      \"inputs\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"set\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"get\",\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"x\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"set\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"get\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{}},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/SimpleStorage.sol\\\":\\\"SimpleStorage\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/SimpleStorage.sol\\\":{\\\"keccak256\\\":\\\"0x27a650f3e92e6057b3f1239be6fc335fb57d75c570d7274d8902eb0b04e48014\\\",\\\"urls\\\":[\\\"bzzr://72f63578772843cf2f8ae2bce4a69c027cbfe7f3e04cc4af14ca023bdc3c35c2\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b5060bd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806360fe47b11460375780636d4ce63c146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea165627a7a7230582077110c26f2f04cec4cbc18a8f64dbb3f6f62c1a0983ce6d8a8601517c30194bd0029\",\n  \"deployedBytecode\": \"0x6080604052348015600f57600080fd5b506004361060325760003560e01c806360fe47b11460375780636d4ce63c146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea165627a7a7230582077110c26f2f04cec4cbc18a8f64dbb3f6f62c1a0983ce6d8a8601517c30194bd0029\",\n  \"sourceMap\": \"25:176:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25:176:1;;;;;;;\",\n  \"deployedSourceMap\": \"25:176:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25:176:1;;;;;;;;;;;;;;;;;;;;;;;;72:53;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;72:53:1;;;;;;;;;;;;;;;;;:::i;:::-;;129:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;72:53;119:1;106:10;:14;;;;72:53;:::o;129:70::-;165:4;184:10;;177:17;;129:70;:::o\",\n  \"source\": \"pragma solidity ^0.5.0;\\n\\ncontract SimpleStorage {\\n  uint storedData;\\n\\n  function set(uint x) public {\\n    storedData = x;\\n  }\\n\\n  function get() public view returns (uint) {\\n    return storedData;\\n  }\\n}\\n\",\n  \"sourcePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/SimpleStorage.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/SimpleStorage.sol\",\n    \"exportedSymbols\": {\n      \"SimpleStorage\": [\n        79\n      ]\n    },\n    \"id\": 80,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 58,\n        \"literals\": [\n          \"solidity\",\n          \"^\",\n          \"0.5\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:1\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 79,\n        \"linearizedBaseContracts\": [\n          79\n        ],\n        \"name\": \"SimpleStorage\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 60,\n            \"name\": \"storedData\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 79,\n            \"src\": \"52:15:1\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 59,\n              \"name\": \"uint\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"52:4:1\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 69,\n              \"nodeType\": \"Block\",\n              \"src\": \"100:25:1\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 67,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 65,\n                      \"name\": \"storedData\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 60,\n                      \"src\": \"106:10:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 66,\n                      \"name\": \"x\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 62,\n                      \"src\": \"119:1:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"106:14:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 68,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"106:14:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 70,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"set\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 63,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 62,\n                  \"name\": \"x\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 70,\n                  \"src\": \"85:6:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 61,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"85:4:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"84:8:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 64,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"100:0:1\"\n            },\n            \"scope\": 79,\n            \"src\": \"72:53:1\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 77,\n              \"nodeType\": \"Block\",\n              \"src\": \"171:28:1\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 75,\n                    \"name\": \"storedData\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 60,\n                    \"src\": \"184:10:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 74,\n                  \"id\": 76,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"177:17:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 78,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"get\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 71,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"141:2:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 74,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 73,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 78,\n                  \"src\": \"165:4:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 72,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"165:4:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"164:6:1\"\n            },\n            \"scope\": 79,\n            \"src\": \"129:70:1\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          }\n        ],\n        \"scope\": 80,\n        \"src\": \"25:176:1\"\n      }\n    ],\n    \"src\": \"0:202:1\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"/Users/randallkanna/Documents/dev/book/fundraiser/contracts/SimpleStorage.sol\",\n    \"exportedSymbols\": {\n      \"SimpleStorage\": [\n        79\n      ]\n    },\n    \"id\": 80,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 58,\n        \"literals\": [\n          \"solidity\",\n          \"^\",\n          \"0.5\",\n          \".0\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:1\"\n      },\n      {\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": null,\n        \"fullyImplemented\": true,\n        \"id\": 79,\n        \"linearizedBaseContracts\": [\n          79\n        ],\n        \"name\": \"SimpleStorage\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"id\": 60,\n            \"name\": \"storedData\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"scope\": 79,\n            \"src\": \"52:15:1\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 59,\n              \"name\": \"uint\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"52:4:1\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 69,\n              \"nodeType\": \"Block\",\n              \"src\": \"100:25:1\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 67,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 65,\n                      \"name\": \"storedData\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 60,\n                      \"src\": \"106:10:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 66,\n                      \"name\": \"x\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 62,\n                      \"src\": \"119:1:1\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"106:14:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 68,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"106:14:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 70,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"set\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 63,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 62,\n                  \"name\": \"x\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 70,\n                  \"src\": \"85:6:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 61,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"85:4:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"84:8:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 64,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"100:0:1\"\n            },\n            \"scope\": 79,\n            \"src\": \"72:53:1\",\n            \"stateMutability\": \"nonpayable\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 77,\n              \"nodeType\": \"Block\",\n              \"src\": \"171:28:1\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 75,\n                    \"name\": \"storedData\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 60,\n                    \"src\": \"184:10:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 74,\n                  \"id\": 76,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"177:17:1\"\n                }\n              ]\n            },\n            \"documentation\": null,\n            \"id\": 78,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"get\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"parameters\": {\n              \"id\": 71,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"141:2:1\"\n            },\n            \"returnParameters\": {\n              \"id\": 74,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 73,\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 78,\n                  \"src\": \"165:4:1\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 72,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"165:4:1\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"164:6:1\"\n            },\n            \"scope\": 79,\n            \"src\": \"129:70:1\",\n            \"stateMutability\": \"view\",\n            \"superFunction\": null,\n            \"visibility\": \"public\"\n          }\n        ],\n        \"scope\": 80,\n        \"src\": \"25:176:1\"\n      }\n    ],\n    \"src\": \"0:202:1\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.5.8+commit.23d335f2.Emscripten.clang\"\n  },\n  \"networks\": {\n    \"5777\": {\n      \"events\": {},\n      \"links\": {},\n      \"address\": \"0xB7780C9AD3ef38bb4C8B48fab37Ef176603E7787\",\n      \"transactionHash\": \"0x0a144793978354e71b1e47e41dbe2e1709dfed7872fcd66dd2d3d2b391b33728\"\n    }\n  },\n  \"schemaVersion\": \"3.0.10\",\n  \"updatedAt\": \"2019-08-30T01:00:14.552Z\",\n  \"devdoc\": {\n    \"methods\": {}\n  },\n  \"userdoc\": {\n    \"methods\": {}\n  }\n}"
  },
  {
    "path": "chapter-9/src/index.css",
    "content": "body {\n  margin: 0;\n  padding: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\",\n    \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n    sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n  font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n    monospace;\n}\n"
  },
  {
    "path": "chapter-9/src/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom'\nimport App from './App';\n\nReactDOM.render((\n  // <Provider store={store}>\n    <BrowserRouter>\n      <App />\n    </BrowserRouter>\n  // </Provider>\n), document.getElementById('root'))\n"
  },
  {
    "path": "chapter-9/src/serviceWorker.js",
    "content": "// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.1/8 is considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\nexport function register(config) {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit http://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl)\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister();\n    });\n  }\n}\n"
  },
  {
    "path": "chapter-9/src/utils/getWeb3.js",
    "content": "import Web3 from \"web3\";\n\nconst getWeb3 = () =>\n  new Promise((resolve, reject) => {\n    // Wait for loading completion to avoid race conditions with web3 injection timing.\n    window.addEventListener(\"load\", async () => {\n      // Modern dapp browsers...\n      if (window.ethereum) {\n        const web3 = new Web3(window.ethereum);\n        try {\n          // Request account access if needed\n          await window.ethereum.enable();\n          // Acccounts now exposed\n          resolve(web3);\n        } catch (error) {\n          reject(error);\n        }\n      }\n      // Legacy dapp browsers...\n      else if (window.web3) {\n        // Use Mist/MetaMask's provider.\n        const web3 = window.web3;\n        console.log(\"Injected web3 detected.\");\n        resolve(web3);\n      }\n      // Fallback to localhost; use dev console port by default...\n      else {\n        const provider = new Web3.providers.HttpProvider(\n          \"http://127.0.0.1:8545\"\n        );\n        const web3 = new Web3(provider);\n        console.log(\"No web3 instance injected, using Local web3.\");\n        resolve(web3);\n      }\n    });\n  });\n\nexport default getWeb3;\n"
  }
]