{
  "contractName": "TestCollateralizedEther",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "numDecimals",
          "type": "uint8"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "kTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "redeemer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "kTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "Redeem",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOfUnderlying",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isUnderlyingEther",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "nativeAmount",
          "type": "uint256"
        }
      ],
      "name": "nativeAmountToUnderlyingAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "kTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "redeemUnderlying",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalReserve",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "underlying",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "underlyingAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "ceil",
          "type": "bool"
        }
      ],
      "name": "underlyingAmountToNativeAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.3+commit.9bfce1f6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"numDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"Redeem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOfUnderlying\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnderlyingEther\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nativeAmount\",\"type\":\"uint256\"}],\"name\":\"nativeAmountToUnderlyingAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"redeemUnderlying\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"ceil\",\"type\":\"bool\"}],\"name\":\"underlyingAmountToNativeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/andrekorol/src/kollateral/protocol/contracts/testing/TestCollateralizedEther.sol\":\"TestCollateralizedEther\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/andrekorol/src/kollateral/protocol/contracts/common/utils/ExtendedMath.sol\":{\"keccak256\":\"0x5ced249631b5dfe431f449d725d9f318b01ab0785306ca5e73cdf43760ab271a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://3f3aef65abfcc02e451ad27a849caba0e6375abb26e28e7605928d19d561c3dd\",\"dweb:/ipfs/QmY5zMeH5x3QMS5xkxkY3DH4SDPWLGJyfPk1R8wPJXH9vr\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/common/utils/ExternalCaller.sol\":{\"keccak256\":\"0x54f88a1f0ac5dd7ab99a0519124cb09f1e19b4efb9baf240bc2500f8caa0b4ff\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://3170671378d20b47498224d065e33fccc223ae772d7f0af2c5ef314f94b75c98\",\"dweb:/ipfs/Qme8ZEEBnBG5Vvj8uyJCD2YVPcLx6funKsSSCpGkTyn1zi\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/testing/TestCollateralizedEther.sol\":{\"keccak256\":\"0x95e84726b811a1a1cfcc050766db70333788c54aa9964f8d6774ad78ccd5bfb0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://740825e7f9484b7146ca0f54bdfecd108ce76c049320bd0fac70c8127dd877e5\",\"dweb:/ipfs/QmSA18kNkQ8VJxvXK2mDFYCQaNCED7UKkLf7qf2jQyHF1D\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedEther.sol\":{\"keccak256\":\"0x2a74a69e11a8a843f818b3a9834dca858a44519471d23e136a535937f099a521\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf6103f0cb1efa175fd4a8417c61a0c27e42781b7f46aadf2ea8ad6c754232df\",\"dweb:/ipfs/QmPz9NJNvroLUAsPzeaUSN8vq7ZGz18DjBaLWiA9gjqsXb\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedToken.sol\":{\"keccak256\":\"0xfaaaa4324c6cc78d9d1268426eb04fe41d8584ade05bbf22eac4875ecdf174d7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1e4149a0ecd14003c261b2243adfc19d7a009c83c32341ebdd6a8929c0bdd14d\",\"dweb:/ipfs/QmQbySda22WBU4oycYfrTye1RsJuz1Ub74ksoST7PeegHW\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/token/UnlimitedApprovalErc20.sol\":{\"keccak256\":\"0x407178fcd78f0a19d705e64aaaa26ae997d228f077f3cf6833f9f3eb31c72308\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://097906cbe6f8f35ba1763bd122d551ec302f45cf677021bbcdb8a55c706940d9\",\"dweb:/ipfs/QmVh7kcUWsXt3QApppB1njhGHfzdP813KSTUF6bh3VCmMM\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x910a2e625b71168563edf9eeef55a50d6d699acfe27ceba3921f291829a8f938\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://248246ac66e6479dce1ad7d4945ec5540c98ceb09881e93c93f7c48d5772925c\",\"dweb:/ipfs/QmXr8tmUiZgEYid6ixeeBRmTdUnASWjKzhP3KRxMPy8fRt\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26e50e3f7b6482fb6f598f2e006994a74aa492687daa4b3eee7fd4fb5398ce7f\",\"dweb:/ipfs/QmZudqoPSkA4USLMFsBBmt19dDPZFS8aaAmL5R7pECXu6t\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x482b6d82ba1c9c73758ae15068a438361d4187b7a4e342db17ef0f828cb5e21a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89725e56bc9c6cfb69521ceaa4a489561b928e930b71e30db85b24024c1c2c03\",\"dweb:/ipfs/QmNvpotZA1Fe48msV6TShSTVxeQ2dkaDS9MTKP4bNxyUG3\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x1153f6dd334c01566417b8c551122450542a2b75a2bbb379d59a8c320ed6da28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://002b4e5c26a2a069ba42486b83bf9c4b5461f3d5def32f9ef52b0aef8905d6d2\",\"dweb:/ipfs/QmPG44XDF4npiqRzzGvqJroDtUKfcR78wcreQ9bXa6guW6\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b506040516200268b3803806200268b833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b5060405260200180519060200190929190505050600183838160039080519060200190620001de92919062000298565b508060049080519060200190620001f792919062000298565b506012600560006101000a81548160ff021916908360ff1602179055505050600160068190555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000271816200027a60201b60201c565b5050506200033e565b80600560006101000a81548160ff021916908360ff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002db57805160ff19168380011785556200030c565b828001600101855582156200030c579182015b828111156200030b578251825591602001919060010190620002ee565b5b5090506200031b91906200031f565b5090565b5b808211156200033a57600081600090555060010162000320565b5090565b61233d806200034e6000396000f3fe6080604052600436106101235760003560e01c80636f307dc3116100a0578063a457c2d711610064578063a457c2d714610647578063a9059cbb146106b8578063b15287db14610729578063db006a7514610778578063dd62ed3e146107c95761012a565b80636f307dc31461046557806370a08231146104a6578063807b9d421461050b578063852a12e31461056657806395d89b41146105b75761012a565b8063313ce567116100e7578063313ce5671461030957806339509351146103375780633af9e669146103a85780634c68df671461040d57806356c04b3b146104385761012a565b806306fdde031461012c578063095ea7b3146101bc5780631249c58b1461022d57806318160ddd1461024d57806323b872dd146102785761012a565b3661012a57005b005b34801561013857600080fd5b5061014161084e565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610181578082015181840152602081019050610166565b50505050905090810190601f1680156101ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101c857600080fd5b50610215600480360360408110156101df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108f0565b60405180821515815260200191505060405180910390f35b61023561090e565b60405180821515815260200191505060405180910390f35b34801561025957600080fd5b5061026261091e565b6040518082815260200191505060405180910390f35b34801561028457600080fd5b506102f16004803603606081101561029b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610928565b60405180821515815260200191505060405180910390f35b34801561031557600080fd5b5061031e6109c6565b604051808260ff16815260200191505060405180910390f35b34801561034357600080fd5b506103906004803603604081101561035a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109dd565b60405180821515815260200191505060405180910390f35b3480156103b457600080fd5b506103f7600480360360208110156103cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a90565b6040518082815260200191505060405180910390f35b34801561041957600080fd5b50610422610aaa565b6040518082815260200191505060405180910390f35b34801561044457600080fd5b5061044d610ab2565b60405180821515815260200191505060405180910390f35b34801561047157600080fd5b5061047a610abb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104b257600080fd5b506104f5600480360360208110156104c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ae5565b6040518082815260200191505060405180910390f35b34801561051757600080fd5b506105506004803603604081101561052e57600080fd5b8101908080359060200190929190803515159060200190929190505050610b2d565b6040518082815260200191505060405180910390f35b34801561057257600080fd5b5061059f6004803603602081101561058957600080fd5b8101908080359060200190929190505050610b43565b60405180821515815260200191505060405180910390f35b3480156105c357600080fd5b506105cc610bde565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561060c5780820151818401526020810190506105f1565b50505050905090810190601f1680156106395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561065357600080fd5b506106a06004803603604081101561066a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c80565b60405180821515815260200191505060405180910390f35b3480156106c457600080fd5b50610711600480360360408110156106db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d4d565b60405180821515815260200191505060405180910390f35b34801561073557600080fd5b506107626004803603602081101561074c57600080fd5b8101908080359060200190929190505050610d6b565b6040518082815260200191505060405180910390f35b34801561078457600080fd5b506107b16004803603602081101561079b57600080fd5b8101908080359060200190929190505050610dc0565b60405180821515815260200191505060405180910390f35b3480156107d557600080fd5b50610838600480360360408110156107ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e57565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108e65780601f106108bb576101008083540402835291602001916108e6565b820191906000526020600020905b8154815290600101906020018083116108c957829003601f168201915b5050505050905090565b60006109046108fd610ede565b8484610ee6565b6001905092915050565b6000610919346110dd565b905090565b6000600254905090565b6000610935848484611214565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61096785610962610ede565b610e57565b146109bb576109ba84610978610ede565b6109b5856040518060600160405280603981526020016121f5603991396109a68a6109a1610ede565b610e57565b6114d59092919063ffffffff16565b610ee6565b5b600190509392505050565b6000600560009054906101000a900460ff16905090565b6000610a866109ea610ede565b84610a8185600160006109fb610ede565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461159590919063ffffffff16565b610ee6565b6001905092915050565b6000610aa3610a9e83610ae5565b610d6b565b9050919050565b600047905090565b60006001905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610b3b8383600061161d565b905092915050565b600080610b4e610aaa565b11610bc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6c6c61746572616c697a6564546f6b656e3a206e6f20726573657276650081525060200191505060405180910390fd5b610bd782610bd2846001600061161d565b611697565b9050919050565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c765780601f10610c4b57610100808354040283529160200191610c76565b820191906000526020600020905b815481529060010190602001808311610c5957829003601f168201915b5050505050905090565b6000610d43610c8d610ede565b84610d3e856040518060600160405280602581526020016122e36025913960016000610cb7610ede565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114d59092919063ffffffff16565b610ee6565b6001905092915050565b6000610d61610d5a610ede565b8484611214565b6001905092915050565b600080610d7661091e565b1415610d855760009050610dbb565b610db8610d9061091e565b610daa610d9b610aaa565b856117f290919063ffffffff16565b61187890919063ffffffff16565b90505b919050565b600080610dcb61091e565b11610e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f436f6c6c61746572616c697a6564546f6b656e3a206e6f20737570706c79000081525060200191505060405180910390fd5b610e50610e4a83610d6b565b83611697565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806122bf6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ff2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806121836022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600060026006541415611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260068190555060008061117d8461116f610aaa565b6118c290919063ffffffff16565b111561119757611190836000600161161d565b905061119b565b8290505b6111a5338261190c565b7f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f338483604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a160019150506001600681905550919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061229a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061213e6023913960400191505060405180910390fd5b61132b838383611ad3565b611396816040518060600160405280602681526020016121a5602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114d59092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611429816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461159590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290611582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561154757808201518184015260208101905061152c565b50505050905090810190601f1680156115745780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080611628610aaa565b14156116375760009050611690565b60008261164b57611646610aaa565b611666565b61166585611657610aaa565b6118c290919063ffffffff16565b5b905061168c61168561167661091e565b876117f290919063ffffffff16565b8286611ad8565b9150505b9392505050565b600060026006541415611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026006819055506117243383611b39565b61172e3384611cfd565b611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612270602a913960400191505060405180910390fd5b7fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929338484604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a160019050600160068190555092915050565b6000808314156118055760009050611872565b600082840290508284828161181657fe5b041461186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061222e6021913960400191505060405180910390fd5b809150505b92915050565b60006118ba83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d89565b905092915050565b600061190483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114d5565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6119bb60008383611ad3565b6119d08160025461159590919063ffffffff16565b600281905550611a27816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461159590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b600080611aee848661187890919063ffffffff16565b9050828015611b1057506000611b0d8587611e4f90919063ffffffff16565b14155b611b1a5780611b2f565b611b2e60018261159590919063ffffffff16565b5b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061224f6021913960400191505060405180910390fd5b611bcb82600083611ad3565b611c3681604051806060016040528060228152602001612161602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114d59092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c8d816002546118c290919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600081471015611d75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4b45746865723a206e6f7420656e6f7567682065746865722062616c616e636581525060200191505060405180910390fd5b611d7f8383611e99565b6001905092915050565b60008083118290611e35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611dfa578082015181840152602081019050611ddf565b50505050905090810190601f168015611e275780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611e4157fe5b049050809150509392505050565b6000611e9183836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250611f10565b905092915050565b80471015611ef2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806121cb602a913960400191505060405180910390fd5b611f0c828260405180602001604052806000815250611fd1565b5050565b6000808314158290611fbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f82578082015181840152602081019050611f67565b50505050905090810190601f168015611faf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481611fc757fe5b0690509392505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1684846040518082805190602001908083835b602083106120215780518252602082019150602081019050602083039250611ffe565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612083576040519150601f19603f3d011682016040523d82523d6000602084013e612088565b606091505b5091509150818190612135576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120fa5780820151818401526020810190506120df565b50505050905090810190601f1680156121275780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545787465726e616c43616c6c65723a20696e73756666696369656e742065746865722062616c616e6365556e6c696d69746564417070726f76616c45726332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a206275726e2066726f6d20746865207a65726f2061646472657373436f6c6c61746572616c697a6564546f6b656e3a20746f6b656e207472616e73666572206661696c656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200a4126c8d6587c70ba9c509740dd0f764080133e8f32f3daf219720aa49dbddf64736f6c63430007030033",
  "deployedBytecode": "0x6080604052600436106101235760003560e01c80636f307dc3116100a0578063a457c2d711610064578063a457c2d714610647578063a9059cbb146106b8578063b15287db14610729578063db006a7514610778578063dd62ed3e146107c95761012a565b80636f307dc31461046557806370a08231146104a6578063807b9d421461050b578063852a12e31461056657806395d89b41146105b75761012a565b8063313ce567116100e7578063313ce5671461030957806339509351146103375780633af9e669146103a85780634c68df671461040d57806356c04b3b146104385761012a565b806306fdde031461012c578063095ea7b3146101bc5780631249c58b1461022d57806318160ddd1461024d57806323b872dd146102785761012a565b3661012a57005b005b34801561013857600080fd5b5061014161084e565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610181578082015181840152602081019050610166565b50505050905090810190601f1680156101ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101c857600080fd5b50610215600480360360408110156101df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108f0565b60405180821515815260200191505060405180910390f35b61023561090e565b60405180821515815260200191505060405180910390f35b34801561025957600080fd5b5061026261091e565b6040518082815260200191505060405180910390f35b34801561028457600080fd5b506102f16004803603606081101561029b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610928565b60405180821515815260200191505060405180910390f35b34801561031557600080fd5b5061031e6109c6565b604051808260ff16815260200191505060405180910390f35b34801561034357600080fd5b506103906004803603604081101561035a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109dd565b60405180821515815260200191505060405180910390f35b3480156103b457600080fd5b506103f7600480360360208110156103cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a90565b6040518082815260200191505060405180910390f35b34801561041957600080fd5b50610422610aaa565b6040518082815260200191505060405180910390f35b34801561044457600080fd5b5061044d610ab2565b60405180821515815260200191505060405180910390f35b34801561047157600080fd5b5061047a610abb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104b257600080fd5b506104f5600480360360208110156104c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ae5565b6040518082815260200191505060405180910390f35b34801561051757600080fd5b506105506004803603604081101561052e57600080fd5b8101908080359060200190929190803515159060200190929190505050610b2d565b6040518082815260200191505060405180910390f35b34801561057257600080fd5b5061059f6004803603602081101561058957600080fd5b8101908080359060200190929190505050610b43565b60405180821515815260200191505060405180910390f35b3480156105c357600080fd5b506105cc610bde565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561060c5780820151818401526020810190506105f1565b50505050905090810190601f1680156106395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561065357600080fd5b506106a06004803603604081101561066a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c80565b60405180821515815260200191505060405180910390f35b3480156106c457600080fd5b50610711600480360360408110156106db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d4d565b60405180821515815260200191505060405180910390f35b34801561073557600080fd5b506107626004803603602081101561074c57600080fd5b8101908080359060200190929190505050610d6b565b6040518082815260200191505060405180910390f35b34801561078457600080fd5b506107b16004803603602081101561079b57600080fd5b8101908080359060200190929190505050610dc0565b60405180821515815260200191505060405180910390f35b3480156107d557600080fd5b50610838600480360360408110156107ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e57565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108e65780601f106108bb576101008083540402835291602001916108e6565b820191906000526020600020905b8154815290600101906020018083116108c957829003601f168201915b5050505050905090565b60006109046108fd610ede565b8484610ee6565b6001905092915050565b6000610919346110dd565b905090565b6000600254905090565b6000610935848484611214565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61096785610962610ede565b610e57565b146109bb576109ba84610978610ede565b6109b5856040518060600160405280603981526020016121f5603991396109a68a6109a1610ede565b610e57565b6114d59092919063ffffffff16565b610ee6565b5b600190509392505050565b6000600560009054906101000a900460ff16905090565b6000610a866109ea610ede565b84610a8185600160006109fb610ede565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461159590919063ffffffff16565b610ee6565b6001905092915050565b6000610aa3610a9e83610ae5565b610d6b565b9050919050565b600047905090565b60006001905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610b3b8383600061161d565b905092915050565b600080610b4e610aaa565b11610bc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6c6c61746572616c697a6564546f6b656e3a206e6f20726573657276650081525060200191505060405180910390fd5b610bd782610bd2846001600061161d565b611697565b9050919050565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c765780601f10610c4b57610100808354040283529160200191610c76565b820191906000526020600020905b815481529060010190602001808311610c5957829003601f168201915b5050505050905090565b6000610d43610c8d610ede565b84610d3e856040518060600160405280602581526020016122e36025913960016000610cb7610ede565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114d59092919063ffffffff16565b610ee6565b6001905092915050565b6000610d61610d5a610ede565b8484611214565b6001905092915050565b600080610d7661091e565b1415610d855760009050610dbb565b610db8610d9061091e565b610daa610d9b610aaa565b856117f290919063ffffffff16565b61187890919063ffffffff16565b90505b919050565b600080610dcb61091e565b11610e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f436f6c6c61746572616c697a6564546f6b656e3a206e6f20737570706c79000081525060200191505060405180910390fd5b610e50610e4a83610d6b565b83611697565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806122bf6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ff2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806121836022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600060026006541415611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260068190555060008061117d8461116f610aaa565b6118c290919063ffffffff16565b111561119757611190836000600161161d565b905061119b565b8290505b6111a5338261190c565b7f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f338483604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a160019150506001600681905550919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061229a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061213e6023913960400191505060405180910390fd5b61132b838383611ad3565b611396816040518060600160405280602681526020016121a5602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114d59092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611429816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461159590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290611582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561154757808201518184015260208101905061152c565b50505050905090810190601f1680156115745780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080611628610aaa565b14156116375760009050611690565b60008261164b57611646610aaa565b611666565b61166585611657610aaa565b6118c290919063ffffffff16565b5b905061168c61168561167661091e565b876117f290919063ffffffff16565b8286611ad8565b9150505b9392505050565b600060026006541415611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026006819055506117243383611b39565b61172e3384611cfd565b611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612270602a913960400191505060405180910390fd5b7fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929338484604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a160019050600160068190555092915050565b6000808314156118055760009050611872565b600082840290508284828161181657fe5b041461186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061222e6021913960400191505060405180910390fd5b809150505b92915050565b60006118ba83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d89565b905092915050565b600061190483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114d5565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6119bb60008383611ad3565b6119d08160025461159590919063ffffffff16565b600281905550611a27816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461159590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b600080611aee848661187890919063ffffffff16565b9050828015611b1057506000611b0d8587611e4f90919063ffffffff16565b14155b611b1a5780611b2f565b611b2e60018261159590919063ffffffff16565b5b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061224f6021913960400191505060405180910390fd5b611bcb82600083611ad3565b611c3681604051806060016040528060228152602001612161602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114d59092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c8d816002546118c290919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600081471015611d75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4b45746865723a206e6f7420656e6f7567682065746865722062616c616e636581525060200191505060405180910390fd5b611d7f8383611e99565b6001905092915050565b60008083118290611e35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611dfa578082015181840152602081019050611ddf565b50505050905090810190601f168015611e275780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611e4157fe5b049050809150509392505050565b6000611e9183836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250611f10565b905092915050565b80471015611ef2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806121cb602a913960400191505060405180910390fd5b611f0c828260405180602001604052806000815250611fd1565b5050565b6000808314158290611fbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f82578082015181840152602081019050611f67565b50505050905090810190601f168015611faf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481611fc757fe5b0690509392505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1684846040518082805190602001908083835b602083106120215780518252602082019150602081019050602083039250611ffe565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612083576040519150601f19603f3d011682016040523d82523d6000602084013e612088565b606091505b5091509150818190612135576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120fa5780820151818401526020810190506120df565b50505050905090810190601f1680156121275780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545787465726e616c43616c6c65723a20696e73756666696369656e742065746865722062616c616e6365556e6c696d69746564417070726f76616c45726332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a206275726e2066726f6d20746865207a65726f2061646472657373436f6c6c61746572616c697a6564546f6b656e3a20746f6b656e207472616e73666572206661696c656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200a4126c8d6587c70ba9c509740dd0f764080133e8f32f3daf219720aa49dbddf64736f6c63430007030033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "709:231:29:-:0;;;771:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;957:1:35;880:4:29;886:6;2023:5:41;2015;:13;;;;;;;;;;;;:::i;:::-;;2048:7;2038;:17;;;;;;;;;;;;:::i;:::-;;2077:2;2065:9;;:14;;;;;;;;;;;;;;;;;;1948:138;;1637:1:44;1743:7;:22;;;;1252:10:36;1238:11;;:24;;;;;;;;;;;;;;;;;;1196:73;904:27:29::1;919:11;904:14;;;:27;;:::i;:::-;771:167:::0;;;709:231;;9961:88:41;10033:9;10021;;:21;;;;;;;;;;;;;;;;;;9961:88;:::o;709:231:29:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "709:231:29:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2151:81:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4187:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;969:95:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3194:98:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;863:558:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3053:81:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5532:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4440:146:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1478:108:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1379:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4592:87:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3350:117:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3248:302:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1607:318;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2345:85:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6234:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3670:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2980:262:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1313:288;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3900:149:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2151:81;2188:13;2220:5;2213:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2151:81;:::o;4187:166::-;4270:4;4286:39;4295:12;:10;:12::i;:::-;4309:7;4318:6;4286:8;:39::i;:::-;4342:4;4335:11;;4187:166;;;;:::o;969:95:35:-;1011:4;1034:23;1047:9;1034:12;:23::i;:::-;1027:30;;969:95;:::o;3194:98:41:-;3247:7;3273:12;;3266:19;;3194:98;:::o;863:558:37:-;999:4;1015:36;1025:6;1033:9;1044:6;1015:9;:36::i;:::-;1108:2;1065:31;1075:6;1083:12;:10;:12::i;:::-;1065:9;:31::i;:::-;:46;1061:333;;1127:256;1153:6;1177:12;:10;:12::i;:::-;1207:162;1264:6;1207:162;;;;;;;;;;;;;;;;;:31;1217:6;1225:12;:10;:12::i;:::-;1207:9;:31::i;:::-;:35;;:162;;;;;:::i;:::-;1127:8;:256::i;:::-;1061:333;1410:4;1403:11;;863:558;;;;;:::o;3053:81:41:-;3094:5;3118:9;;;;;;;;;;;3111:16;;3053:81;:::o;5532:215::-;5620:4;5636:83;5645:12;:10;:12::i;:::-;5659:7;5668:50;5707:10;5668:11;:25;5680:12;:10;:12::i;:::-;5668:25;;;;;;;;;;;;;;;:34;5694:7;5668:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;5636:8;:83::i;:::-;5736:4;5729:11;;5532:215;;;;:::o;4440:146:36:-;4505:7;4531:48;4562:16;4572:5;4562:9;:16::i;:::-;4531:30;:48::i;:::-;4524:55;;4440:146;;;:::o;1478:108:35:-;1532:7;1558:21;1551:28;;1478:108;:::o;1379:93::-;1438:4;1461;1454:11;;1379:93;:::o;4592:87:36:-;4635:7;4661:11;;;;;;;;;;;4654:18;;4592:87;:::o;3350:117:41:-;3416:7;3442:9;:18;3452:7;3442:18;;;;;;;;;;;;;;;;3435:25;;3350:117;;;:::o;3248:302:36:-;3370:7;3412:131;3468:16;3502:4;3524:5;3412:38;:131::i;:::-;3393:150;;3248:302;;;;:::o;1607:318::-;1672:4;1713:1;1696:14;:12;:14::i;:::-;:18;1688:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:139;1811:11;1840:64;1879:11;1892:4;1898:5;1840:38;:64::i;:::-;1779:14;:139::i;:::-;1760:158;;1607:318;;;:::o;2345:85:41:-;2384:13;2416:7;2409:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2345:85;:::o;6234:266::-;6327:4;6343:129;6352:12;:10;:12::i;:::-;6366:7;6375:96;6414:15;6375:96;;;;;;;;;;;;;;;;;:11;:25;6387:12;:10;:12::i;:::-;6375:25;;;;;;;;;;;;;;;:34;6401:7;6375:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6343:8;:129::i;:::-;6489:4;6482:11;;6234:266;;;;:::o;3670:172::-;3756:4;3772:42;3782:12;:10;:12::i;:::-;3796:9;3807:6;3772:9;:42::i;:::-;3831:4;3824:11;;3670:172;;;;:::o;2980:262:36:-;3087:7;3131:1;3114:13;:11;:13::i;:::-;:18;3110:57;;;3155:1;3148:8;;;;3110:57;3184:51;3221:13;:11;:13::i;:::-;3184:32;3201:14;:12;:14::i;:::-;3184:12;:16;;:32;;;;:::i;:::-;:36;;:51;;;;:::i;:::-;3177:58;;2980:262;;;;:::o;1313:288::-;1369:4;1409:1;1393:13;:11;:13::i;:::-;:17;1385:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1474:120;1506:44;1537:12;1506:30;:44::i;:::-;1568:12;1474:14;:120::i;:::-;1455:139;;1313:288;;;:::o;3900:149:41:-;3989:7;4015:11;:18;4027:5;4015:18;;;;;;;;;;;;;;;:27;4034:7;4015:27;;;;;;;;;;;;;;;;4008:34;;3900:149;;;;:::o;590:104:38:-;643:15;677:10;670:17;;590:104;:::o;9298:340:41:-;9416:1;9399:19;;:5;:19;;;;9391:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9496:1;9477:21;;:7;:21;;;;9469:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9578:6;9548:11;:18;9560:5;9548:18;;;;;;;;;;;;;;;:27;9567:7;9548:27;;;;;;;;;;;;;;;:36;;;;9615:7;9599:32;;9608:5;9599:32;;;9624:6;9599:32;;;;;;;;;;;;;;;;;;9298:340;;;:::o;1931:486:36:-;2000:4;1680:1:44;2260:7;;:19;;2252:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1680:1;2390:7;:18;;;;2016:20:36::1;2079:1:::0;2050:26:::1;2069:6;2050:14;:12;:14::i;:::-;:18;;:26;;;;:::i;:::-;:30;2046:249;;;2111:121;2167:6;2191:5;2214:4;2111:38;:121::i;:::-;2096:136;;2046:249;;;2278:6;2263:21;;2046:249;2304:31;2310:10;2322:12;2304:5;:31::i;:::-;2350:38;2355:10;2367:6;2375:12;2350:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2406:4;2399:11;;;1637:1:44::0;2563:7;:22;;;;1931:486:36;;;:::o;6974:530:41:-;7097:1;7079:20;;:6;:20;;;;7071:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7180:1;7159:23;;:9;:23;;;;7151:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7233:47;7254:6;7262:9;7273:6;7233:20;:47::i;:::-;7311:71;7333:6;7311:71;;;;;;;;;;;;;;;;;:9;:17;7321:6;7311:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7291:9;:17;7301:6;7291:17;;;;;;;;;;;;;;;:91;;;;7415:32;7440:6;7415:9;:20;7425:9;7415:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7392:9;:20;7402:9;7392:20;;;;;;;;;;;;;;;:55;;;;7479:9;7462:35;;7471:6;7462:35;;;7490:6;7462:35;;;;;;;;;;;;;;;;;;6974:530;;;:::o;1746:187:40:-;1832:7;1864:1;1859;:6;;1867:12;1851:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1890:9;1906:1;1902;:5;1890:17;;1925:1;1918:8;;;1746:187;;;;;:::o;874:176::-;932:7;951:9;967:1;963;:5;951:17;;991:1;986;:6;;978:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;1035:8;;;874:176;;;;:::o;3556:740:36:-;3716:7;3757:1;3739:14;:12;:14::i;:::-;:19;3735:58;;;3781:1;3774:8;;;;3735:58;3904:28;3935:15;:95;;4016:14;:12;:14::i;:::-;3935:95;;;3965:36;3984:16;3965:14;:12;:14::i;:::-;:18;;:36;;;;:::i;:::-;3935:95;3904:126;;4151:138;4180:35;4201:13;:11;:13::i;:::-;4180:16;:20;;:35;;;;:::i;:::-;4233:20;4271:4;4151:11;:138::i;:::-;4132:157;;;3556:740;;;;;;:::o;2423:404::-;2545:4;1680:1:44;2260:7;;:19;;2252:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1680:1;2390:7;:18;;;;2565:31:36::1;2571:10;2583:12;2565:5;:31::i;:::-;2627:43;2646:10;2658:11;2627:18;:43::i;:::-;2606:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2753:45;2760:10;2772:11;2785:12;2753:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2816:4;2809:11;;1637:1:44::0;2563:7;:22;;;;2423:404:36;;;;:::o;2180:459:40:-;2238:7;2484:1;2479;:6;2475:45;;;2508:1;2501:8;;;;2475:45;2530:9;2546:1;2542;:5;2530:17;;2574:1;2569;2565;:5;;;;;;:10;2557:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:1;2624:8;;;2180:459;;;;;:::o;3101:130::-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3178:46;;3101:130;;;;:::o;1321:134::-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1398:50;;1321:134;;;;:::o;7775:370:41:-;7877:1;7858:21;;:7;:21;;;;7850:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7926:49;7955:1;7959:7;7968:6;7926:20;:49::i;:::-;8001:24;8018:6;8001:12;;:16;;:24;;;;:::i;:::-;7986:12;:39;;;;8056:30;8079:6;8056:9;:18;8066:7;8056:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;8035:9;:18;8045:7;8035:18;;;;;;;;;;;;;;;:51;;;;8122:7;8101:37;;8118:1;8101:37;;;8131:6;8101:37;;;;;;;;;;;;;;;;;;7775:370;;:::o;10636:92::-;;;;:::o;830:226:8:-;940:7;959:13;975:8;981:1;975;:5;;:8;;;;:::i;:::-;959:24;;1001:7;:24;;;;;1024:1;1012:8;1018:1;1012;:5;;:8;;;;:::i;:::-;:13;;1001:24;1000:49;;1044:5;1000:49;;;1029:12;1039:1;1029:5;:9;;:12;;;;:::i;:::-;1000:49;993:56;;;830:226;;;;;:::o;8465:410:41:-;8567:1;8548:21;;:7;:21;;;;8540:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8618:49;8639:7;8656:1;8660:6;8618:20;:49::i;:::-;8699:68;8722:6;8699:68;;;;;;;;;;;;;;;;;:9;:18;8709:7;8699:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;8678:9;:18;8688:7;8678:18;;;;;;;;;;;;;;;:89;;;;8792:24;8809:6;8792:12;;:16;;:24;;;;:::i;:::-;8777:12;:39;;;;8857:1;8831:37;;8840:7;8831:37;;;8861:6;8831:37;;;;;;;;;;;;;;;;;;8465:410;;:::o;1070:303:35:-;1177:4;1243:6;1218:21;:31;;1197:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1317:28;1334:2;1338:6;1317:16;:28::i;:::-;1362:4;1355:11;;1070:303;;;;:::o;3713:272:40:-;3799:7;3830:1;3826;:5;3833:12;3818:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;3856:17;;3977:1;3970:8;;;3713:272;;;;;:::o;4436:128::-;4494:7;4520:37;4524:1;4527;4520:37;;;;;;;;;;;;;;;;;:3;:37::i;:::-;4513:44;;4436:128;;;;:::o;695:240:9:-;815:6;790:21;:31;;769:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;899:29;912:3;917:6;899:29;;;;;;;;;;;;:12;:29::i;:::-;695:240;;:::o;5035:163:40:-;5121:7;5153:1;5148;:6;;5156:12;5140:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5190:1;5186;:5;;;;;;5179:12;;5035:163;;;;;:::o;941:267:9:-;1062:12;1076:23;1103:3;:8;;1119:6;1140:5;1103:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1061:94;;;;1173:7;1189:10;1165:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;941:267;;;;;:::o",
  "source": "/*\n\n    Copyright 2020 Kollateral LLC.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n*/\n\n// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.7.0;\n\nimport \"../token/CollateralizedEther.sol\";\n\ncontract TestCollateralizedEther is CollateralizedEther {\n    constructor(\n        string memory name,\n        string memory symbol,\n        uint8 numDecimals\n    ) ERC20(name, symbol) {\n        _setupDecimals(numDecimals);\n    }\n}\n",
  "sourcePath": "/Users/andrekorol/src/kollateral/protocol/contracts/testing/TestCollateralizedEther.sol",
  "ast": {
    "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/testing/TestCollateralizedEther.sol",
    "exportedSymbols": {
      "CollateralizedEther": [
        4894
      ],
      "CollateralizedToken": [
        5197
      ],
      "Context": [
        5279
      ],
      "ERC20": [
        6087
      ],
      "ExtendedMath": [
        1506
      ],
      "ExternalCaller": [
        1563
      ],
      "IERC20": [
        6165
      ],
      "ReentrancyGuard": [
        6295
      ],
      "SafeMath": [
        5584
      ],
      "TestCollateralizedEther": [
        4116
      ],
      "UnlimitedApprovalErc20": [
        5256
      ]
    },
    "id": 4117,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4094,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "640:23:29"
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedEther.sol",
        "file": "../token/CollateralizedEther.sol",
        "id": 4095,
        "nodeType": "ImportDirective",
        "scope": 4117,
        "sourceUnit": 4895,
        "src": "665:42:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 4096,
              "name": "CollateralizedEther",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4894,
              "src": "745:19:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CollateralizedEther_$4894",
                "typeString": "contract CollateralizedEther"
              }
            },
            "id": 4097,
            "nodeType": "InheritanceSpecifier",
            "src": "745:19:29"
          }
        ],
        "contractDependencies": [
          1506,
          1563,
          4894,
          5197,
          5256,
          5279,
          6087,
          6165,
          6295
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 4116,
        "linearizedBaseContracts": [
          4116,
          4894,
          1563,
          5197,
          1506,
          6295,
          5256,
          6087,
          6165,
          5279
        ],
        "name": "TestCollateralizedEther",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 4114,
              "nodeType": "Block",
              "src": "894:44:29",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4111,
                        "name": "numDecimals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "919:11:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 4110,
                      "name": "_setupDecimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6075,
                      "src": "904:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint8_$returns$__$",
                        "typeString": "function (uint8)"
                      }
                    },
                    "id": 4112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "904:27:29",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4113,
                  "nodeType": "ExpressionStatement",
                  "src": "904:27:29"
                }
              ]
            },
            "id": 4115,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 4106,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4099,
                    "src": "880:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "id": 4107,
                    "name": "symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4101,
                    "src": "886:6:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 4108,
                "modifierName": {
                  "id": 4105,
                  "name": "ERC20",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6087,
                  "src": "874:5:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ERC20_$6087_$",
                    "typeString": "type(contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "874:19:29"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4104,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4099,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 4115,
                  "src": "792:18:29",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4098,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "792:6:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4101,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 4115,
                  "src": "820:20:29",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4100,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "820:6:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4103,
                  "mutability": "mutable",
                  "name": "numDecimals",
                  "nodeType": "VariableDeclaration",
                  "scope": 4115,
                  "src": "850:17:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 4102,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "850:5:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "782:91:29"
            },
            "returnParameters": {
              "id": 4109,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "894:0:29"
            },
            "scope": 4116,
            "src": "771:167:29",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 4117,
        "src": "709:231:29"
      }
    ],
    "src": "640:301:29"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/testing/TestCollateralizedEther.sol",
      "exportedSymbols": {
        "CollateralizedEther": [
          4894
        ],
        "CollateralizedToken": [
          5197
        ],
        "Context": [
          5279
        ],
        "ERC20": [
          6087
        ],
        "ExtendedMath": [
          1506
        ],
        "ExternalCaller": [
          1563
        ],
        "IERC20": [
          6165
        ],
        "ReentrancyGuard": [
          6295
        ],
        "SafeMath": [
          5584
        ],
        "TestCollateralizedEther": [
          4116
        ],
        "UnlimitedApprovalErc20": [
          5256
        ]
      },
      "license": "Apache-2.0"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.7",
            ".0"
          ]
        },
        "id": 4094,
        "name": "PragmaDirective",
        "src": "640:23:29"
      },
      {
        "attributes": {
          "SourceUnit": 4895,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedEther.sol",
          "file": "../token/CollateralizedEther.sol",
          "scope": 4117,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4095,
        "name": "ImportDirective",
        "src": "665:42:29"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            1506,
            1563,
            4894,
            5197,
            5256,
            5279,
            6087,
            6165,
            6295
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            4116,
            4894,
            1563,
            5197,
            1506,
            6295,
            5256,
            6087,
            6165,
            5279
          ],
          "name": "TestCollateralizedEther",
          "scope": 4117
        },
        "children": [
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "CollateralizedEther",
                  "referencedDeclaration": 4894,
                  "type": "contract CollateralizedEther"
                },
                "id": 4096,
                "name": "UserDefinedTypeName",
                "src": "745:19:29"
              }
            ],
            "id": 4097,
            "name": "InheritanceSpecifier",
            "src": "745:19:29"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "name": "",
              "scope": 4116,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "name",
                      "scope": 4115,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "string",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string"
                        },
                        "id": 4098,
                        "name": "ElementaryTypeName",
                        "src": "792:6:29"
                      }
                    ],
                    "id": 4099,
                    "name": "VariableDeclaration",
                    "src": "792:18:29"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "symbol",
                      "scope": 4115,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "string",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string"
                        },
                        "id": 4100,
                        "name": "ElementaryTypeName",
                        "src": "820:6:29"
                      }
                    ],
                    "id": 4101,
                    "name": "VariableDeclaration",
                    "src": "820:20:29"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "numDecimals",
                      "scope": 4115,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 4102,
                        "name": "ElementaryTypeName",
                        "src": "850:5:29"
                      }
                    ],
                    "id": 4103,
                    "name": "VariableDeclaration",
                    "src": "850:17:29"
                  }
                ],
                "id": 4104,
                "name": "ParameterList",
                "src": "782:91:29"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4109,
                "name": "ParameterList",
                "src": "894:0:29"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 6087,
                      "type": "type(contract ERC20)",
                      "value": "ERC20"
                    },
                    "id": 4105,
                    "name": "Identifier",
                    "src": "874:5:29"
                  },
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4099,
                      "type": "string memory",
                      "value": "name"
                    },
                    "id": 4106,
                    "name": "Identifier",
                    "src": "880:4:29"
                  },
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4101,
                      "type": "string memory",
                      "value": "symbol"
                    },
                    "id": 4107,
                    "name": "Identifier",
                    "src": "886:6:29"
                  }
                ],
                "id": 4108,
                "name": "ModifierInvocation",
                "src": "874:19:29"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6075,
                              "type": "function (uint8)",
                              "value": "_setupDecimals"
                            },
                            "id": 4110,
                            "name": "Identifier",
                            "src": "904:14:29"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4103,
                              "type": "uint8",
                              "value": "numDecimals"
                            },
                            "id": 4111,
                            "name": "Identifier",
                            "src": "919:11:29"
                          }
                        ],
                        "id": 4112,
                        "name": "FunctionCall",
                        "src": "904:27:29"
                      }
                    ],
                    "id": 4113,
                    "name": "ExpressionStatement",
                    "src": "904:27:29"
                  }
                ],
                "id": 4114,
                "name": "Block",
                "src": "894:44:29"
              }
            ],
            "id": 4115,
            "name": "FunctionDefinition",
            "src": "771:167:29"
          }
        ],
        "id": 4116,
        "name": "ContractDefinition",
        "src": "709:231:29"
      }
    ],
    "id": 4117,
    "name": "SourceUnit",
    "src": "640:301:29"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.3+commit.9bfce1f6.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.3",
  "updatedAt": "2021-02-01T23:13:33.246Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}."
      },
      "approve(address,uint256)": {
        "details": "See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."
      },
      "balanceOf(address)": {
        "details": "See {IERC20-balanceOf}."
      },
      "decimals()": {
        "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
      },
      "decreaseAllowance(address,uint256)": {
        "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
      },
      "increaseAllowance(address,uint256)": {
        "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
      },
      "name()": {
        "details": "Returns the name of the token."
      },
      "symbol()": {
        "details": "Returns the symbol of the token, usually a shorter version of the name."
      },
      "totalSupply()": {
        "details": "See {IERC20-totalSupply}."
      },
      "transfer(address,uint256)": {
        "details": "See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
      },
      "transferFrom(address,address,uint256)": {
        "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}