{
  "_format": "hh-sol-artifact-1",
  "contractName": "BareVault",
  "sourceName": "contracts/Vaults/BareVault.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "AdminFeePaid",
      "type": "event"
    },
    {
      "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": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "CallerFeePaid",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "feerecipient",
          "type": "address"
        }
      ],
      "name": "FeeRecipientChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "adminFee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "callerFee",
          "type": "uint256"
        }
      ],
      "name": "FeesChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxReinvestStale",
          "type": "uint256"
        }
      ],
      "name": "MaxReinvestStaleChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "preCompound",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "postCompound",
          "type": "uint256"
        }
      ],
      "name": "Reinvested",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "RewardTokenAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "RewardTokenDeprecated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "rewardToken",
          "type": "address"
        }
      ],
      "name": "RewardTokenSet",
      "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "inputs": [],
      "name": "FIRST_DONATION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIN_FIRST_MINT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIN_SWAP",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "WNative",
      "outputs": [
        {
          "internalType": "contract IWNative",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "adminFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "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": [],
      "name": "borrowerOperations",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "callerFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "compound",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "compounder",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "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": "uint256",
          "name": "_amt",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amt",
          "type": "uint256"
        }
      ],
      "name": "depositFor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "_v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        }
      ],
      "name": "depositWithPermit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "receiptTokens",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "deprecateRewardToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amt",
          "type": "uint256"
        }
      ],
      "name": "emergencyRedeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amtToReturn",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeRecipient",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_ind",
          "type": "uint256"
        }
      ],
      "name": "getRewardToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "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": [
        {
          "internalType": "address",
          "name": "_underlying",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "_adminFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_callerFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_maxReinvestStale",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_WNative",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_borrowerOperations",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastReinvestTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxReinvestStale",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mintLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "numRewardTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "pushRewardToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "receiptPerUnderlying",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amt",
          "type": "uint256"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amtToReturn",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amt",
          "type": "uint256"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "rewardTokens",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_compounder",
          "type": "address"
        }
      ],
      "name": "setCompounder",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_adminFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_callerFee",
          "type": "uint256"
        }
      ],
      "name": "setFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_feeRecipient",
          "type": "address"
        }
      ],
      "name": "setFeeRecipient",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newMintLimit",
          "type": "uint256"
        }
      ],
      "name": "setMintLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_maxReinvestStale",
          "type": "uint256"
        }
      ],
      "name": "setStale",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalHoldings",
      "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": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "underlying",
      "outputs": [
        {
          "internalType": "contract IERC20Metadata",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "underlyingDecimal",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "underlyingPerReceipt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612b4180620000f36000396000f3fe6080604052600436106102f25760003560e01c806395d89b411161018d578063db006a75116100e0578063e9ec2e991161008f578063f69e20461161006c578063f69e204614610871578063f74877b514610886578063fa2cc3c0146108a6578063fac991cc146108c657005b8063e9ec2e991461081c578063f2fde38b14610831578063f3ec43c71461085157005b8063e00e0732116100bd578063e00e0732146107c7578063e0794ec5146107e7578063e74b981b146107fc57005b8063db006a751461074b578063dd62ed3e1461076b578063dfa2b901146107b157005b8063a9059cbb1161013c578063b6b55f2511610119578063b6b55f25146106fe578063c5c700351461071e578063cb8dd1d71461073657005b8063a9059cbb146106a5578063b3533793146106c5578063b3db428b146106de57005b8063a0be06f91161016a578063a0be06f91461064f578063a457c2d714610665578063a57f8cb71461068557005b806395d89b4114610604578063996517cf146106195780639e6a1d7d1461062f57005b80634690484011610245578063715018a6116101f45780637bb7bed1116101d15780637bb7bed1146105b057806385a393bb146105d05780638da5cb5b146105e657005b8063715018a61461056057806377553ad4146105755780637b5dbbdd1461059557005b806352f7c9881161022257806352f7c988146104ea5780636f307dc31461050a57806370a082311461052a57005b806346904840146104955780634a7e5cbb146104b5578063515bc323146104ca57005b80631e9a6950116102a157806334d441d01161027e57806334d441d01461043f57806339509351146104555780633d61b2861461047557005b80631e9a6950146103e357806323b872dd14610403578063313ce5671461042357005b806318160ddd116102cf57806318160ddd1461038e57806319b333e5146103ad5780631e0b8053146103c357005b806306fdde03146102fb578063095ea7b314610326578063134b6edb1461035657005b366102f957005b005b34801561030757600080fd5b506103106108e6565b60405161031d91906124e3565b60405180910390f35b34801561033257600080fd5b5061034661034136600461252d565b610978565b604051901515815260200161031d565b34801561036257600080fd5b50610376610371366004612557565b610992565b6040516001600160a01b03909116815260200161031d565b34801561039a57600080fd5b506035545b60405190815260200161031d565b3480156103b957600080fd5b5061039f60cc5481565b3480156103cf57600080fd5b506102f96103de366004612557565b6109c2565b3480156103ef57600080fd5b5061039f6103fe36600461252d565b610ac0565b34801561040f57600080fd5b5061034661041e366004612570565b610b77565b34801561042f57600080fd5b506040516012815260200161031d565b34801561044b57600080fd5b5061039f60d05481565b34801561046157600080fd5b5061034661047036600461252d565b610b9d565b34801561048157600080fd5b5061039f610490366004612557565b610bdc565b3480156104a157600080fd5b5060ce54610376906001600160a01b031681565b3480156104c157600080fd5b5060cb5461039f565b3480156104d657600080fd5b5061039f6104e53660046125bb565b610c70565b3480156104f657600080fd5b506102f961050536600461260e565b610d26565b34801561051657600080fd5b5060ca54610376906001600160a01b031681565b34801561053657600080fd5b5061039f610545366004612630565b6001600160a01b031660009081526033602052604090205490565b34801561056c57600080fd5b506102f9610d85565b34801561058157600080fd5b5060d254610376906001600160a01b031681565b3480156105a157600080fd5b5061039f662386f26fc1000081565b3480156105bc57600080fd5b506103766105cb366004612557565b610d99565b3480156105dc57600080fd5b5061039f60cd5481565b3480156105f257600080fd5b506097546001600160a01b0316610376565b34801561061057600080fd5b50610310610dc3565b34801561062557600080fd5b5061039f60d45481565b34801561063b57600080fd5b506102f961064a366004612557565b610dd2565b34801561065b57600080fd5b5061039f60cf5481565b34801561067157600080fd5b5061034661068036600461252d565b610ddf565b34801561069157600080fd5b506102f96106a0366004612630565b610e94565b3480156106b157600080fd5b506103466106c036600461252d565b610f77565b3480156106d157600080fd5b5061039f64e8d4a5100081565b3480156106ea57600080fd5b5061039f6106f9366004612570565b610f85565b34801561070a57600080fd5b5061039f610719366004612557565b610ff5565b34801561072a57600080fd5b5061039f6305f5e10081565b34801561074257600080fd5b5061039f611002565b34801561075757600080fd5b5061039f610766366004612557565b6110b2565b34801561077757600080fd5b5061039f61078636600461264b565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b3480156107bd57600080fd5b5061039f60c95481565b3480156107d357600080fd5b506102f96107e2366004612630565b6110be565b3480156107f357600080fd5b5061039f6110e8565b34801561080857600080fd5b506102f9610817366004612630565b611187565b34801561082857600080fd5b5061039f6111dd565b34801561083d57600080fd5b506102f961084c366004612630565b61124a565b34801561085d57600080fd5b5060d154610376906001600160a01b031681565b34801561087d57600080fd5b506102f96112da565b34801561089257600080fd5b506102f96108a1366004612557565b6112f4565b3480156108b257600080fd5b5060d354610376906001600160a01b031681565b3480156108d257600080fd5b506102f96108e1366004612721565b611331565b6060603680546108f5906127d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610921906127d4565b801561096e5780601f106109435761010080835404028352916020019161096e565b820191906000526020600020905b81548152906001019060200180831161095157829003601f168201915b5050505050905090565b600033610986818585611546565b60019150505b92915050565b600060cb82815481106109a7576109a761280e565b6000918252602090912001546001600160a01b031692915050565b6109ca61169f565b60cb548110610a205760405162461bcd60e51b815260206004820152600d60248201527f4f7574206f6620626f756e64730000000000000000000000000000000000000060448201526064015b60405180910390fd5b600060cb8281548110610a3557610a3561280e565b600091825260208220015460cb80546001600160a01b0390921693509084908110610a6257610a6261280e565b60009182526020918290200180546001600160a01b0319166001600160a01b0393841617905560405191831682527f4938b9ffed446eb2918b8c3ce549b29cba7336d1f46a4f88defe66284aa4f05c91015b60405180910390a15050565b6000610aca6116f9565b60cd5460cc54610ada919061283a565b421115610ae957610ae9611752565b670de0b6b3a764000082610afb611002565b610b05919061284d565b610b0f9190612864565b9050610b1b338361175c565b610b2583826118c4565b604080518281526020810184905233916001600160a01b0386169183917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a461098c6001606555565b600033610b858582856118e6565b610b90858585611978565b60019150505b9392505050565b3360008181526034602090815260408083206001600160a01b03871684529091528120549091906109869082908690610bd790879061283a565b611546565b6000610be66116f9565b670de0b6b3a764000082610bf8611002565b610c02919061284d565b610c0c9190612864565b9050610c18338361175c565b610c2233826118c4565b60408051828152602081018490523391829182917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a4610c6b6001606555565b919050565b60ca546040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c481018390526000916001600160a01b03169063d505accf9060e401600060405180830381600087803b158015610cfa57600080fd5b505af1158015610d0e573d6000803e3d6000fd5b50505050610d1b87610ff5565b979650505050505050565b610d2e61169f565b612710610d3b828461283a565b10610d4557600080fd5b60cf82905560d081905560408051838152602081018390527f64f84976d9c917a44796104a59950fdbd9b3c16a5dd348b546d738301f6bd0689101610ab4565b610d8d61169f565b610d976000611b6c565b565b60cb8181548110610da957600080fd5b6000918252602090912001546001600160a01b0316905081565b6060603780546108f5906127d4565b610dda61169f565b60d455565b3360008181526034602090815260408083206001600160a01b038716845290915281205490919083811015610e7c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610a17565b610e898286868403611546565b506001949350505050565b610e9c61169f565b6001600160a01b038116610ef25760405162461bcd60e51b815260206004820152600960248201527f30206164647265737300000000000000000000000000000000000000000000006044820152606401610a17565b60cb80546001810182556000919091527fa7ce836d032b2bf62b7e2097a8e0a6d8aeb35405ad15271e96d3b0188a1d06fb0180546001600160a01b0319166001600160a01b0383169081179091556040519081527ff3e4c2c64e71e6ba2eaab9a599bced62f9eb91d2cda610bf41aa8c80ff2cf826906020015b60405180910390a150565b600033610986818585611978565b60d2546000906001600160a01b03163314610fe25760405162461bcd60e51b815260206004820152601760248201527f426f72726f7765724f7065726174696f6e73206f6e6c790000000000000000006044820152606401610a17565b610fed848484611bbe565b949350505050565b600061098c333384611bbe565b600061100d60355490565b6000036110275760c95461102290600a61296a565b905090565b60355460ca546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611072573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110969190612976565b6110a890670de0b6b3a764000061284d565b6110229190612864565b600061098c3383610ac0565b6110c661169f565b60d380546001600160a01b0319166001600160a01b0392909216919091179055565b60006110f360355490565b6000036111135760c95461110890602461298f565b61102290600a61296a565b60ca546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561115b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117f9190612976565b603554611096565b61118f61169f565b60ce80546001600160a01b0319166001600160a01b0383169081179091556040519081527f167cccccc6e9b2892a740ec13fc1e51d3de8ea384f25bd87fee7412d588637e290602001610f6c565b60ca546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611226573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110229190612976565b61125261169f565b6001600160a01b0381166112ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a17565b6112d781611b6c565b50565b6112e26116f9565b6112ea611752565b610d976001606555565b6112fc61169f565b60cd8190556040518181527fae9404327b54fba571d9b1cdab382fa3d040154cf63a792c9b85a58a4a1c63c590602001610f6c565b600054610100900460ff16158080156113515750600054600160ff909116105b8061136b5750303b15801561136b575060005460ff166001145b6113dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a17565b6000805460ff191660011790558015611400576000805461ff0019166101001790555b611408611dbe565b611410611e31565b61141a8888611ea4565b60ca80546001600160a01b0319166001600160a01b038b16908117909155604080517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567916004808201926020929091908290030181865afa15801561148c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b091906129a2565b60ff1660c9556114c08686610d26565b60cd84905560d180546001600160a01b038086166001600160a01b03199283161790925560d2805492851692909116919091179055801561153b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6001600160a01b0383166115c15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b03821661163d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6097546001600160a01b03163314610d975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b60026065540361174b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a17565b6002606555565b4260cc55610d9780565b6001600160a01b0382166117d85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b038216600090815260336020526040902054818110156118675760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611692565b505050565b60ca546118db906001600160a01b03168383611f19565b5050565b6001606555565b6001600160a01b03838116600090815260346020908152604080832093861683529290522054600019811461197257818110156119655760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a17565b6119728484848403611546565b50505050565b6001600160a01b0383166119f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b038216611a705760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b03831660009081526033602052604090205481811015611aff5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b5f9086815260200190565b60405180910390a3611972565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611bc86116f9565b60008211611c185760405162461bcd60e51b815260206004820152600860248201527f3020746f6b656e730000000000000000000000000000000000000000000000006044820152606401610a17565b611c2182611fc2565b60cd5460cc54611c31919061283a565b421115611c4057611c40611752565b81670de0b6b3a764000081611c536110e8565b611c5d919061284d565b611c679190612864565b9150611c7260355490565b600003611cf95764e8d4a51000821015611cce5760405162461bcd60e51b815260206004820152601a60248201527f4d696e696d756d206669727374206d696e74206e6f74206d65740000000000006044820152606401610a17565b60ce54611ce8906001600160a01b03166305f5e100612037565b611cf66305f5e1008361298f565b91505b81600003611d495760405162461bcd60e51b815260206004820152600a60248201527f30207265636569766564000000000000000000000000000000000000000000006044820152606401610a17565b611d5385846120f8565b611d5d8483612037565b836001600160a01b0316856001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78585604051611dab929190918252602082015260400190565b60405180910390a350610b966001606555565b600054610100900460ff16611e295760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a17565b610d97612110565b600054610100900460ff16611e9c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a17565b610d97612184565b600054610100900460ff16611f0f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a17565b6118db82826121ef565b6040516001600160a01b0383166024820152604481018290526118bf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612273565b60d454600003611fcf5750565b6000611fd96111dd565b60d454909150611fe9838361283a565b11156118db5760405162461bcd60e51b815260206004820152601360248201527f4d696e74206c696d6974206578636565646564000000000000000000000000006044820152606401610a17565b6001600160a01b03821661208d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a17565b806035600082825461209f919061283a565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60ca546118db906001600160a01b031683308461235b565b600054610100900460ff1661217b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a17565b610d9733611b6c565b600054610100900460ff166118df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a17565b600054610100900460ff1661225a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a17565b60366122668382612a0d565b5060376118bf8282612a0d565b60006122c8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166123ac9092919063ffffffff16565b90508051600014806122e95750808060200190518101906122e99190612acd565b6118bf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a17565b6040516001600160a01b03808516602483015283166044820152606481018290526119729085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611f5e565b6060610fed848460008585600080866001600160a01b031685876040516123d39190612aef565b60006040518083038185875af1925050503d8060008114612410576040519150601f19603f3d011682016040523d82523d6000602084013e612415565b606091505b5091509150610d1b8783838760608315612490578251600003612489576001600160a01b0385163b6124895760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a17565b5081610fed565b610fed83838151156124a55781518083602001fd5b8060405162461bcd60e51b8152600401610a1791906124e3565b60005b838110156124da5781810151838201526020016124c2565b50506000910152565b60208152600082518060208401526125028160408501602087016124bf565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114610c6b57600080fd5b6000806040838503121561254057600080fd5b61254983612516565b946020939093013593505050565b60006020828403121561256957600080fd5b5035919050565b60008060006060848603121561258557600080fd5b61258e84612516565b925061259c60208501612516565b9150604084013590509250925092565b60ff811681146112d757600080fd5b60008060008060008060c087890312156125d457600080fd5b86359550602087013594506040870135935060608701356125f4816125ac565b9598949750929560808101359460a0909101359350915050565b6000806040838503121561262157600080fd5b50508035926020909101359150565b60006020828403121561264257600080fd5b610b9682612516565b6000806040838503121561265e57600080fd5b61266783612516565b915061267560208401612516565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126126a557600080fd5b813567ffffffffffffffff808211156126c0576126c061267e565b604051601f8301601f19908116603f011681019082821181831017156126e8576126e861267e565b8160405283815286602085880101111561270157600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600080610100898b03121561273e57600080fd5b61274789612516565b9750602089013567ffffffffffffffff8082111561276457600080fd5b6127708c838d01612694565b985060408b013591508082111561278657600080fd5b506127938b828c01612694565b965050606089013594506080890135935060a089013592506127b760c08a01612516565b91506127c560e08a01612516565b90509295985092959890939650565b600181811c908216806127e857607f821691505b60208210810361280857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561098c5761098c612824565b808202811582820484141761098c5761098c612824565b60008261288157634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156128c15781600019048211156128a7576128a7612824565b808516156128b457918102915b93841c939080029061288b565b509250929050565b6000826128d85750600161098c565b816128e55750600061098c565b81600181146128fb576002811461290557612921565b600191505061098c565b60ff84111561291657612916612824565b50506001821b61098c565b5060208310610133831016604e8410600b8410161715612944575081810a61098c565b61294e8383612886565b806000190482111561296257612962612824565b029392505050565b6000610b9683836128c9565b60006020828403121561298857600080fd5b5051919050565b8181038181111561098c5761098c612824565b6000602082840312156129b457600080fd5b8151610b96816125ac565b601f8211156118bf57600081815260208120601f850160051c810160208610156129e65750805b601f850160051c820191505b81811015612a05578281556001016129f2565b505050505050565b815167ffffffffffffffff811115612a2757612a2761267e565b612a3b81612a3584546127d4565b846129bf565b602080601f831160018114612a705760008415612a585750858301515b600019600386901b1c1916600185901b178555612a05565b600085815260208120601f198616915b82811015612a9f57888601518255948401946001909101908401612a80565b5085821015612abd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215612adf57600080fd5b81518015158114610b9657600080fd5b60008251612b018184602087016124bf565b919091019291505056fea2646970667358221220c5292a68abb5154417d20e14c485d71a407dda1fa5307d269870bbf7ce8f2bdc64736f6c63430008130033",
  "deployedBytecode": "0x6080604052600436106102f25760003560e01c806395d89b411161018d578063db006a75116100e0578063e9ec2e991161008f578063f69e20461161006c578063f69e204614610871578063f74877b514610886578063fa2cc3c0146108a6578063fac991cc146108c657005b8063e9ec2e991461081c578063f2fde38b14610831578063f3ec43c71461085157005b8063e00e0732116100bd578063e00e0732146107c7578063e0794ec5146107e7578063e74b981b146107fc57005b8063db006a751461074b578063dd62ed3e1461076b578063dfa2b901146107b157005b8063a9059cbb1161013c578063b6b55f2511610119578063b6b55f25146106fe578063c5c700351461071e578063cb8dd1d71461073657005b8063a9059cbb146106a5578063b3533793146106c5578063b3db428b146106de57005b8063a0be06f91161016a578063a0be06f91461064f578063a457c2d714610665578063a57f8cb71461068557005b806395d89b4114610604578063996517cf146106195780639e6a1d7d1461062f57005b80634690484011610245578063715018a6116101f45780637bb7bed1116101d15780637bb7bed1146105b057806385a393bb146105d05780638da5cb5b146105e657005b8063715018a61461056057806377553ad4146105755780637b5dbbdd1461059557005b806352f7c9881161022257806352f7c988146104ea5780636f307dc31461050a57806370a082311461052a57005b806346904840146104955780634a7e5cbb146104b5578063515bc323146104ca57005b80631e9a6950116102a157806334d441d01161027e57806334d441d01461043f57806339509351146104555780633d61b2861461047557005b80631e9a6950146103e357806323b872dd14610403578063313ce5671461042357005b806318160ddd116102cf57806318160ddd1461038e57806319b333e5146103ad5780631e0b8053146103c357005b806306fdde03146102fb578063095ea7b314610326578063134b6edb1461035657005b366102f957005b005b34801561030757600080fd5b506103106108e6565b60405161031d91906124e3565b60405180910390f35b34801561033257600080fd5b5061034661034136600461252d565b610978565b604051901515815260200161031d565b34801561036257600080fd5b50610376610371366004612557565b610992565b6040516001600160a01b03909116815260200161031d565b34801561039a57600080fd5b506035545b60405190815260200161031d565b3480156103b957600080fd5b5061039f60cc5481565b3480156103cf57600080fd5b506102f96103de366004612557565b6109c2565b3480156103ef57600080fd5b5061039f6103fe36600461252d565b610ac0565b34801561040f57600080fd5b5061034661041e366004612570565b610b77565b34801561042f57600080fd5b506040516012815260200161031d565b34801561044b57600080fd5b5061039f60d05481565b34801561046157600080fd5b5061034661047036600461252d565b610b9d565b34801561048157600080fd5b5061039f610490366004612557565b610bdc565b3480156104a157600080fd5b5060ce54610376906001600160a01b031681565b3480156104c157600080fd5b5060cb5461039f565b3480156104d657600080fd5b5061039f6104e53660046125bb565b610c70565b3480156104f657600080fd5b506102f961050536600461260e565b610d26565b34801561051657600080fd5b5060ca54610376906001600160a01b031681565b34801561053657600080fd5b5061039f610545366004612630565b6001600160a01b031660009081526033602052604090205490565b34801561056c57600080fd5b506102f9610d85565b34801561058157600080fd5b5060d254610376906001600160a01b031681565b3480156105a157600080fd5b5061039f662386f26fc1000081565b3480156105bc57600080fd5b506103766105cb366004612557565b610d99565b3480156105dc57600080fd5b5061039f60cd5481565b3480156105f257600080fd5b506097546001600160a01b0316610376565b34801561061057600080fd5b50610310610dc3565b34801561062557600080fd5b5061039f60d45481565b34801561063b57600080fd5b506102f961064a366004612557565b610dd2565b34801561065b57600080fd5b5061039f60cf5481565b34801561067157600080fd5b5061034661068036600461252d565b610ddf565b34801561069157600080fd5b506102f96106a0366004612630565b610e94565b3480156106b157600080fd5b506103466106c036600461252d565b610f77565b3480156106d157600080fd5b5061039f64e8d4a5100081565b3480156106ea57600080fd5b5061039f6106f9366004612570565b610f85565b34801561070a57600080fd5b5061039f610719366004612557565b610ff5565b34801561072a57600080fd5b5061039f6305f5e10081565b34801561074257600080fd5b5061039f611002565b34801561075757600080fd5b5061039f610766366004612557565b6110b2565b34801561077757600080fd5b5061039f61078636600461264b565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b3480156107bd57600080fd5b5061039f60c95481565b3480156107d357600080fd5b506102f96107e2366004612630565b6110be565b3480156107f357600080fd5b5061039f6110e8565b34801561080857600080fd5b506102f9610817366004612630565b611187565b34801561082857600080fd5b5061039f6111dd565b34801561083d57600080fd5b506102f961084c366004612630565b61124a565b34801561085d57600080fd5b5060d154610376906001600160a01b031681565b34801561087d57600080fd5b506102f96112da565b34801561089257600080fd5b506102f96108a1366004612557565b6112f4565b3480156108b257600080fd5b5060d354610376906001600160a01b031681565b3480156108d257600080fd5b506102f96108e1366004612721565b611331565b6060603680546108f5906127d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610921906127d4565b801561096e5780601f106109435761010080835404028352916020019161096e565b820191906000526020600020905b81548152906001019060200180831161095157829003601f168201915b5050505050905090565b600033610986818585611546565b60019150505b92915050565b600060cb82815481106109a7576109a761280e565b6000918252602090912001546001600160a01b031692915050565b6109ca61169f565b60cb548110610a205760405162461bcd60e51b815260206004820152600d60248201527f4f7574206f6620626f756e64730000000000000000000000000000000000000060448201526064015b60405180910390fd5b600060cb8281548110610a3557610a3561280e565b600091825260208220015460cb80546001600160a01b0390921693509084908110610a6257610a6261280e565b60009182526020918290200180546001600160a01b0319166001600160a01b0393841617905560405191831682527f4938b9ffed446eb2918b8c3ce549b29cba7336d1f46a4f88defe66284aa4f05c91015b60405180910390a15050565b6000610aca6116f9565b60cd5460cc54610ada919061283a565b421115610ae957610ae9611752565b670de0b6b3a764000082610afb611002565b610b05919061284d565b610b0f9190612864565b9050610b1b338361175c565b610b2583826118c4565b604080518281526020810184905233916001600160a01b0386169183917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a461098c6001606555565b600033610b858582856118e6565b610b90858585611978565b60019150505b9392505050565b3360008181526034602090815260408083206001600160a01b03871684529091528120549091906109869082908690610bd790879061283a565b611546565b6000610be66116f9565b670de0b6b3a764000082610bf8611002565b610c02919061284d565b610c0c9190612864565b9050610c18338361175c565b610c2233826118c4565b60408051828152602081018490523391829182917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a4610c6b6001606555565b919050565b60ca546040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c481018390526000916001600160a01b03169063d505accf9060e401600060405180830381600087803b158015610cfa57600080fd5b505af1158015610d0e573d6000803e3d6000fd5b50505050610d1b87610ff5565b979650505050505050565b610d2e61169f565b612710610d3b828461283a565b10610d4557600080fd5b60cf82905560d081905560408051838152602081018390527f64f84976d9c917a44796104a59950fdbd9b3c16a5dd348b546d738301f6bd0689101610ab4565b610d8d61169f565b610d976000611b6c565b565b60cb8181548110610da957600080fd5b6000918252602090912001546001600160a01b0316905081565b6060603780546108f5906127d4565b610dda61169f565b60d455565b3360008181526034602090815260408083206001600160a01b038716845290915281205490919083811015610e7c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610a17565b610e898286868403611546565b506001949350505050565b610e9c61169f565b6001600160a01b038116610ef25760405162461bcd60e51b815260206004820152600960248201527f30206164647265737300000000000000000000000000000000000000000000006044820152606401610a17565b60cb80546001810182556000919091527fa7ce836d032b2bf62b7e2097a8e0a6d8aeb35405ad15271e96d3b0188a1d06fb0180546001600160a01b0319166001600160a01b0383169081179091556040519081527ff3e4c2c64e71e6ba2eaab9a599bced62f9eb91d2cda610bf41aa8c80ff2cf826906020015b60405180910390a150565b600033610986818585611978565b60d2546000906001600160a01b03163314610fe25760405162461bcd60e51b815260206004820152601760248201527f426f72726f7765724f7065726174696f6e73206f6e6c790000000000000000006044820152606401610a17565b610fed848484611bbe565b949350505050565b600061098c333384611bbe565b600061100d60355490565b6000036110275760c95461102290600a61296a565b905090565b60355460ca546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611072573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110969190612976565b6110a890670de0b6b3a764000061284d565b6110229190612864565b600061098c3383610ac0565b6110c661169f565b60d380546001600160a01b0319166001600160a01b0392909216919091179055565b60006110f360355490565b6000036111135760c95461110890602461298f565b61102290600a61296a565b60ca546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561115b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117f9190612976565b603554611096565b61118f61169f565b60ce80546001600160a01b0319166001600160a01b0383169081179091556040519081527f167cccccc6e9b2892a740ec13fc1e51d3de8ea384f25bd87fee7412d588637e290602001610f6c565b60ca546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611226573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110229190612976565b61125261169f565b6001600160a01b0381166112ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a17565b6112d781611b6c565b50565b6112e26116f9565b6112ea611752565b610d976001606555565b6112fc61169f565b60cd8190556040518181527fae9404327b54fba571d9b1cdab382fa3d040154cf63a792c9b85a58a4a1c63c590602001610f6c565b600054610100900460ff16158080156113515750600054600160ff909116105b8061136b5750303b15801561136b575060005460ff166001145b6113dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a17565b6000805460ff191660011790558015611400576000805461ff0019166101001790555b611408611dbe565b611410611e31565b61141a8888611ea4565b60ca80546001600160a01b0319166001600160a01b038b16908117909155604080517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567916004808201926020929091908290030181865afa15801561148c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b091906129a2565b60ff1660c9556114c08686610d26565b60cd84905560d180546001600160a01b038086166001600160a01b03199283161790925560d2805492851692909116919091179055801561153b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6001600160a01b0383166115c15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b03821661163d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6097546001600160a01b03163314610d975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b60026065540361174b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a17565b6002606555565b4260cc55610d9780565b6001600160a01b0382166117d85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b038216600090815260336020526040902054818110156118675760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611692565b505050565b60ca546118db906001600160a01b03168383611f19565b5050565b6001606555565b6001600160a01b03838116600090815260346020908152604080832093861683529290522054600019811461197257818110156119655760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a17565b6119728484848403611546565b50505050565b6001600160a01b0383166119f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b038216611a705760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b03831660009081526033602052604090205481811015611aff5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b5f9086815260200190565b60405180910390a3611972565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611bc86116f9565b60008211611c185760405162461bcd60e51b815260206004820152600860248201527f3020746f6b656e730000000000000000000000000000000000000000000000006044820152606401610a17565b611c2182611fc2565b60cd5460cc54611c31919061283a565b421115611c4057611c40611752565b81670de0b6b3a764000081611c536110e8565b611c5d919061284d565b611c679190612864565b9150611c7260355490565b600003611cf95764e8d4a51000821015611cce5760405162461bcd60e51b815260206004820152601a60248201527f4d696e696d756d206669727374206d696e74206e6f74206d65740000000000006044820152606401610a17565b60ce54611ce8906001600160a01b03166305f5e100612037565b611cf66305f5e1008361298f565b91505b81600003611d495760405162461bcd60e51b815260206004820152600a60248201527f30207265636569766564000000000000000000000000000000000000000000006044820152606401610a17565b611d5385846120f8565b611d5d8483612037565b836001600160a01b0316856001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78585604051611dab929190918252602082015260400190565b60405180910390a350610b966001606555565b600054610100900460ff16611e295760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a17565b610d97612110565b600054610100900460ff16611e9c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a17565b610d97612184565b600054610100900460ff16611f0f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a17565b6118db82826121ef565b6040516001600160a01b0383166024820152604481018290526118bf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612273565b60d454600003611fcf5750565b6000611fd96111dd565b60d454909150611fe9838361283a565b11156118db5760405162461bcd60e51b815260206004820152601360248201527f4d696e74206c696d6974206578636565646564000000000000000000000000006044820152606401610a17565b6001600160a01b03821661208d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a17565b806035600082825461209f919061283a565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60ca546118db906001600160a01b031683308461235b565b600054610100900460ff1661217b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a17565b610d9733611b6c565b600054610100900460ff166118df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a17565b600054610100900460ff1661225a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a17565b60366122668382612a0d565b5060376118bf8282612a0d565b60006122c8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166123ac9092919063ffffffff16565b90508051600014806122e95750808060200190518101906122e99190612acd565b6118bf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a17565b6040516001600160a01b03808516602483015283166044820152606481018290526119729085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611f5e565b6060610fed848460008585600080866001600160a01b031685876040516123d39190612aef565b60006040518083038185875af1925050503d8060008114612410576040519150601f19603f3d011682016040523d82523d6000602084013e612415565b606091505b5091509150610d1b8783838760608315612490578251600003612489576001600160a01b0385163b6124895760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a17565b5081610fed565b610fed83838151156124a55781518083602001fd5b8060405162461bcd60e51b8152600401610a1791906124e3565b60005b838110156124da5781810151838201526020016124c2565b50506000910152565b60208152600082518060208401526125028160408501602087016124bf565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114610c6b57600080fd5b6000806040838503121561254057600080fd5b61254983612516565b946020939093013593505050565b60006020828403121561256957600080fd5b5035919050565b60008060006060848603121561258557600080fd5b61258e84612516565b925061259c60208501612516565b9150604084013590509250925092565b60ff811681146112d757600080fd5b60008060008060008060c087890312156125d457600080fd5b86359550602087013594506040870135935060608701356125f4816125ac565b9598949750929560808101359460a0909101359350915050565b6000806040838503121561262157600080fd5b50508035926020909101359150565b60006020828403121561264257600080fd5b610b9682612516565b6000806040838503121561265e57600080fd5b61266783612516565b915061267560208401612516565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126126a557600080fd5b813567ffffffffffffffff808211156126c0576126c061267e565b604051601f8301601f19908116603f011681019082821181831017156126e8576126e861267e565b8160405283815286602085880101111561270157600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600080610100898b03121561273e57600080fd5b61274789612516565b9750602089013567ffffffffffffffff8082111561276457600080fd5b6127708c838d01612694565b985060408b013591508082111561278657600080fd5b506127938b828c01612694565b965050606089013594506080890135935060a089013592506127b760c08a01612516565b91506127c560e08a01612516565b90509295985092959890939650565b600181811c908216806127e857607f821691505b60208210810361280857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561098c5761098c612824565b808202811582820484141761098c5761098c612824565b60008261288157634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156128c15781600019048211156128a7576128a7612824565b808516156128b457918102915b93841c939080029061288b565b509250929050565b6000826128d85750600161098c565b816128e55750600061098c565b81600181146128fb576002811461290557612921565b600191505061098c565b60ff84111561291657612916612824565b50506001821b61098c565b5060208310610133831016604e8410600b8410161715612944575081810a61098c565b61294e8383612886565b806000190482111561296257612962612824565b029392505050565b6000610b9683836128c9565b60006020828403121561298857600080fd5b5051919050565b8181038181111561098c5761098c612824565b6000602082840312156129b457600080fd5b8151610b96816125ac565b601f8211156118bf57600081815260208120601f850160051c810160208610156129e65750805b601f850160051c820191505b81811015612a05578281556001016129f2565b505050505050565b815167ffffffffffffffff811115612a2757612a2761267e565b612a3b81612a3584546127d4565b846129bf565b602080601f831160018114612a705760008415612a585750858301515b600019600386901b1c1916600185901b178555612a05565b600085815260208120601f198616915b82811015612a9f57888601518255948401946001909101908401612a80565b5085821015612abd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215612adf57600080fd5b81518015158114610b9657600080fd5b60008251612b018184602087016124bf565b919091019291505056fea2646970667358221220c5292a68abb5154417d20e14c485d71a407dda1fa5307d269870bbf7ce8f2bdc64736f6c63430008130033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
