{
  "_format": "hh-sol-artifact-1",
  "contractName": "LoanMaintenance",
  "sourceName": "contracts/modules/LoanMaintenance.sol",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newPrincipal",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newCollateral",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "interestDuration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralToLoanRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentMargin",
          "type": "uint256"
        }
      ],
      "name": "Borrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegated",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isActive",
          "type": "bool"
        }
      ],
      "name": "DelegatedManagerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "rate",
          "type": "uint256"
        }
      ],
      "name": "DepositCollateral",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeRebatePercent",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "basisPoint",
          "type": "uint256"
        }
      ],
      "name": "EarnReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeRebatePercent",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "basisPoint",
          "type": "uint256"
        }
      ],
      "name": "EarnRewardFail",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sourceToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "destToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sourceAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "destAmount",
          "type": "uint256"
        }
      ],
      "name": "ExternalSwap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sourceToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "destToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sourceAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "destAmount",
          "type": "uint256"
        }
      ],
      "name": "LoanSwap",
      "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": true,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PayBorrowingFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "interestToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "effectiveInterest",
          "type": "uint256"
        }
      ],
      "name": "PayInterestTransfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PayLendingFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PayTradingFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "prevModuleContractAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newModuleContractAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "module",
          "type": "bytes32"
        }
      ],
      "name": "ProtocolModuleContractReplaced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "positionSize",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowedAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "settlementDate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "entryPrice",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "entryLeverage",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentLeverage",
          "type": "uint256"
        }
      ],
      "name": "Trade",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "VaultDeposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "VaultWithdraw",
      "type": "event"
    },
    {
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "admin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "affiliateFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "affiliateRewardsHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "affiliateTradingTokenFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "affiliatesReferrerBalances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "affiliatesUserReferrer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowerNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "borrowerOrders",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lockedAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "createdTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expirationTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "borrowingFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowingFeeTokensHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowingFeeTokensPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "delegatedManagers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        }
      ],
      "name": "depositCollateral",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "useCollateral",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "extendLoanDuration",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "secondsExtended",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feeRebatePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feesController",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "count",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "unsafeOnly",
          "type": "bool"
        }
      ],
      "name": "getActiveLoans",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "loanId",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "loanToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "collateralToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "principal",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "collateral",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "interestOwedPerDay",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "interestDepositRemaining",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "startRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "startMargin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maintenanceMargin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "currentMargin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxLoanTerm",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "endTimestamp",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxLiquidatable",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxSeizable",
              "type": "uint256"
            }
          ],
          "internalType": "struct LoanMaintenance.LoanReturnData[]",
          "name": "loansData",
          "type": "tuple[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        }
      ],
      "name": "getLenderInterestData",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "interestPaid",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestPaidDate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestOwedPerDay",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestUnPaid",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestFeePercent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "principalTotal",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        }
      ],
      "name": "getLoan",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "loanId",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "loanToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "collateralToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "principal",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "collateral",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "interestOwedPerDay",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "interestDepositRemaining",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "startRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "startMargin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maintenanceMargin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "currentMargin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxLoanTerm",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "endTimestamp",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxLiquidatable",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxSeizable",
              "type": "uint256"
            }
          ],
          "internalType": "struct LoanMaintenance.LoanReturnData",
          "name": "loanData",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        }
      ],
      "name": "getLoanInterestData",
      "outputs": [
        {
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "interestOwedPerDay",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestDepositTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestDepositRemaining",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "count",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "loanType",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isLender",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "unsafeOnly",
          "type": "bool"
        }
      ],
      "name": "getUserLoans",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "loanId",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "loanToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "collateralToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "principal",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "collateral",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "interestOwedPerDay",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "interestDepositRemaining",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "startRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "startMargin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maintenanceMargin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "currentMargin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxLoanTerm",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "endTimestamp",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxLiquidatable",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxSeizable",
              "type": "uint256"
            }
          ],
          "internalType": "struct LoanMaintenance.LoanReturnData[]",
          "name": "loansData",
          "type": "tuple[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lenderInterest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "principalTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "owedPerDay",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "owedTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "paidTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "updatedTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "lenderOrders",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lockedAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "createdTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expirationTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lendingFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lendingFeeTokensHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lendingFeeTokensPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "liquidationIncentivePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "loanInterest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "owedPerDay",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "depositTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "updatedTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "loanParams",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "active",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "minInitialMargin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maintenanceMargin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxLoanTerm",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "loanPoolToUnderlying",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "loans",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "loanParamsId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "pendingTradesId",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "active",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "principal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateral",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "endTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startMargin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startRate",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "lender",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lockedSOVAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "name": "logicTargets",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "maxDisagreement",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "maxSwapSize",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "minReferralsToPayout",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "pause",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "priceFeeds",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolTokenHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolTokenPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "withdrawAmount",
          "type": "uint256"
        }
      ],
      "name": "reduceLoanDuration",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "secondsReduced",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rolloverBaseReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rolloverFlexFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sourceBuffer",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sovTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sovrynSwapContractRegistryAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "specialRebates",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "supportedTokens",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "swapsImpl",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tradingFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tradingFeeTokensHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tradingFeeTokensPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "underlyingToLoanPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "userNotFirstTradeFlag",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        }
      ],
      "name": "withdrawAccruedInterest",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "withdrawAmount",
          "type": "uint256"
        }
      ],
      "name": "withdrawCollateral",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "actualWithdrawAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "wrbtcToken",
      "outputs": [
        {
          "internalType": "contract IWrbtcERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526001600055678ac7230489e80000601555670214e8348c4f000060185567013fbe85edc90000601b55674563918244f40000602055674563918244f40000602155674563918244f400006027556127106028556802b5e3af16b1880000602955650f478e084000602b5567016345785d8a0000602c556802b5e3af16b1880000602f5560036035556801158e460913d00000603955348015620000a657600080fd5b506000620000bc6001600160e01b036200011016565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000114565b3390565b6151db80620001246000396000f3fe6080604052600436106103b85760003560e01c80638f32d59b116101f2578063cfc85c061161010d578063e8f62764116100a0578063f589a3e71161006f578063f589a3e714610aeb578063f6ddc8b314610b00578063f706b1f214610b15578063f851a44014610b2a576103b8565b8063e8f6276414610a8c578063edab119f14610aa1578063f0e085f514610ab6578063f2fde38b14610acb576103b8565b8063d485045e116100dc578063d485045e14610a19578063db35400d14610a39578063dea9b46414610a59578063e81fefa014610a6c576103b8565b8063cfc85c06146109bc578063d1979fb0146109cf578063d288208c146109ef578063d473c2da14610a04576103b8565b8063b7e1524111610185578063c4a9081511610154578063c4a908151461090e578063c4d66de814610946578063cb6eacd114610968578063cd5d808d1461099c576103b8565b8063b7e15241146108a4578063b9cffa3e146108c4578063ba4861e9146108d9578063bdee453c146108ee576103b8565b8063acc04348116101c1578063acc0434814610838578063ae0a85301461084d578063afe8400914610862578063b30643d914610884576103b8565b80638f32d59b146107be57806392d894f8146107d3578063959083d3146107f35780639b16cd8714610808576103b8565b80634699f846116102e25780637420ca3e116102755780638456cb59116102445780638456cb59146107475780638932f5f71461075c5780638da5cb5b146107895780638dc48ba51461079e576103b8565b80637420ca3e146106f3578063742e67981461070857806378d849ed1461071d5780637a8faeb814610732576103b8565b806360857c2c116102b157806360857c2c1461066257806362fff3f61461068257806368c4ac26146106b35780636e663730146106d3576103b8565b80634699f846146105f45780634f28cac214610609578063569fc1fb1461061e578063574442cc1461064d576103b8565b806324cc57491161035a5780633452d2d4116103295780633452d2d4146105745780633fca506e146105945780634115a2b6146105b45780634203e395146105d4576103b8565b806324cc5749146104fd5780632a3240271461052a5780632f4707641461053f5780633432423c14610554576103b8565b8063122f0e3a11610396578063122f0e3a1461047057806317548b791461049d5780631b7bde74146104bd578063218b39c6146104dd576103b8565b806302a3fe64146103e6578063065d810f1461041c5780630676c1b71461044e575b3480156103c457600080fd5b5060405162461bcd60e51b81526004016103dd90614fa2565b60405180910390fd5b3480156103f257600080fd5b50610406610401366004614000565b610b3f565b6040516104139190614cec565b60405180910390f35b34801561042857600080fd5b5061043c610437366004613fd0565b610c8c565b6040516104139695949392919061508a565b34801561045a57600080fd5b50610463610ccc565b6040516104139190614b3a565b34801561047c57600080fd5b5061049061048b3660046140e2565b610cdb565b6040516104139190615061565b3480156104a957600080fd5b506104636104b83660046141cc565b61107b565b3480156104c957600080fd5b506104906104d8366004613f96565b611096565b3480156104e957600080fd5b506104636104f8366004613f78565b6110b3565b34801561050957600080fd5b5061051d610518366004613f78565b6110ce565b6040516104139190614cfd565b34801561053657600080fd5b506104906110e3565b34801561054b57600080fd5b506104906110e9565b34801561056057600080fd5b5061043c61056f366004613fd0565b6110ef565b34801561058057600080fd5b5061049061058f366004613f78565b61112f565b3480156105a057600080fd5b506104906105af366004613f78565b611141565b3480156105c057600080fd5b5061051d6105cf3660046140c3565b611153565b3480156105e057600080fd5b506104906105ef366004613f78565b611173565b34801561060057600080fd5b50610490611185565b34801561061557600080fd5b5061049061118b565b34801561062a57600080fd5b5061063e6106393660046140a5565b611191565b60405161041393929190614e35565b34801561065957600080fd5b506104906111b2565b34801561066e57600080fd5b5061040661067d366004614238565b6111b8565b34801561068e57600080fd5b506106a261069d366004613f96565b6112b7565b60405161041395949392919061506f565b3480156106bf57600080fd5b5061051d6106ce366004613f78565b6112f1565b3480156106df57600080fd5b506104636106ee366004613f78565b611306565b3480156106ff57600080fd5b50610463611321565b34801561071457600080fd5b50610490611330565b34801561072957600080fd5b50610463611336565b34801561073e57600080fd5b50610490611345565b34801561075357600080fd5b5061051d61134b565b34801561076857600080fd5b5061077c6107773660046140a5565b611354565b6040516104139190615052565b34801561079557600080fd5b5061046361136e565b3480156107aa57600080fd5b506104636107b9366004613f78565b61137d565b3480156107ca57600080fd5b5061051d611398565b3480156107df57600080fd5b506104906107ee366004613f78565b6113be565b3480156107ff57600080fd5b506104906113d0565b34801561081457600080fd5b506108286108233660046140a5565b6113d6565b6040516104139493929190614cd1565b34801561084457600080fd5b50610490611467565b34801561085957600080fd5b5061049061146d565b34801561086e57600080fd5b50610877611473565b6040516104139190614e43565b34801561089057600080fd5b5061049061089f366004613f78565b611482565b3480156108b057600080fd5b506104906108bf366004613f78565b611494565b3480156108d057600080fd5b506104636114a6565b3480156108e557600080fd5b506104636114b5565b3480156108fa57600080fd5b50610490610909366004613f78565b6114c4565b34801561091a57600080fd5b5061092e6109293660046140a5565b6114d6565b6040516104139c9b9a99989796959493929190614d82565b34801561095257600080fd5b50610966610961366004613f78565b611548565b005b34801561097457600080fd5b506109886109833660046140a5565b6116a3565b604051610413989796959493929190614d0b565b3480156109a857600080fd5b506104906109b7366004613f96565b6116f5565b6104906109ca36600461414e565b611712565b3480156109db57600080fd5b5061043c6109ea366004613f96565b611b8a565b3480156109fb57600080fd5b50610463611c79565b348015610a1057600080fd5b50610490611c88565b348015610a2557600080fd5b50610490610a34366004613f78565b611c8e565b348015610a4557600080fd5b50610490610a543660046140e2565b611ca0565b610966610a6736600461412f565b611ec5565b348015610a7857600080fd5b50610966610a87366004613f78565b6120ec565b348015610a9857600080fd5b5061046361211c565b348015610aad57600080fd5b5061049061212b565b348015610ac257600080fd5b50610490612131565b348015610ad757600080fd5b50610966610ae6366004613f78565b612137565b348015610af757600080fd5b50610490612164565b348015610b0c57600080fd5b5061049061216a565b348015610b2157600080fd5b50610463612170565b348015610b3657600080fd5b5061046361217f565b6060600083610b65576001600160a01b0388166000908152601260205260409020610b7e565b6001600160a01b03881660009081526011602052604090205b90506000610baa610b8e8361218e565b610b9e8a8a63ffffffff61219516565b9063ffffffff6121ba16565b9050808810610bbb5750610c829050565b86604051908082528060200260200182016040528015610bf557816020015b610be2613d6a565b815260200190600190039081610bda5790505b50925060008882035b8015610c715788821415610c1157610c71565b610c19613d6a565b610c39610c3286600019858f010163ffffffff6121d016565b8a896121f4565b8051909150610c485750610c68565b80868481518110610c5557fe5b6020908102919091010152506001909101905b60001901610bfe565b5087811015610c7e578084525b5050505b9695505050505050565b6009602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b6031546001600160a01b031681565b6000600160005414610cff5760405162461bcd60e51b81526004016103dd90614fd2565b6002600055603d5460ff1615610d275760405162461bcd60e51b81526004016103dd90614e72565b81610d445760405162461bcd60e51b81526004016103dd90614e62565b6000848152600660209081526040808320600181015484526007909252909120600382015460ff16610d885760405162461bcd60e51b81526004016103dd90614fc2565b600a8201546001600160a01b0316331480610dbe575081546000908152600a6020908152604080832033845290915290205460ff165b610dda5760405162461bcd60e51b81526004016103dd90614f72565b600681015415610dfc5760405162461bcd60e51b81526004016103dd90614ea2565b42826007015411610e1f5760405162461bcd60e51b81526004016103dd90615002565b600b8201546002820154610e3f916001600160a01b03908116911661257a565b81546000818152600c6020526040902060028301546003840154600a8601549293610e7f93859391926001600160a01b0392831692908116911642612658565b6000610ebf62015180610eb38460000154610ea74289600701546126b390919063ffffffff16565b9063ffffffff6126f516565b9063ffffffff61272f16565b9050808610610ee05760405162461bcd60e51b81526004016103dd90614f42565b602d5460028401546001600160a01b0390811691161415610f0a57610f058787612771565b610f23565b6002830154610f23906001600160a01b03168888612849565b8154610f3c90610eb3886201518063ffffffff6126f516565b945084846007015411610f615760405162461bcd60e51b81526004016103dd90614ee2565b6007840154610f76908663ffffffff6126b316565b600785018190554210610f9b5760405162461bcd60e51b81526004016103dd90614ee2565b6007840154600090610fb3904263ffffffff6126b316565b9050610e108111610fd65760405162461bcd60e51b81526004016103dd90614ee2565b6001830154610feb908863ffffffff6126b316565b6001840155600b858101546001600160a01b039081166000908152602092835260408082206002808a01549094168352909352919091200154611034908863ffffffff6126b316565b600b958601546001600160a01b0390811660009081526020978852604080822060029889015490931682529190975286209094019390935550506001909155509392505050565b6005602052600090815260409020546001600160a01b031681565b603b60209081526000928352604080842090915290825290205481565b6023602052600090815260409020546001600160a01b031681565b60326020526000908152604090205460ff1681565b60185481565b601f5481565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b601a6020526000908152604090205481565b602a6020526000908152604090205481565b600a60209081526000928352604080842090915290825290205460ff1681565b60166020526000908152604090205481565b60155481565b60295481565b600c6020526000908152604090208054600182015460029092015490919083565b602b5481565b606060006111d96111c9600f61218e565b610b9e878763ffffffff61219516565b90508085106111e857506112b0565b8360405190808252806020026020018201604052801561122257816020015b61120f613d6a565b8152602001906001900390816112075790505b50915060008582035b80156112a0578582141561123e576112a0565b611246613d6a565b611268611260600f600019858c010163ffffffff6121d016565b6000886121f4565b80519091506112775750611297565b8085848151811061128457fe5b6020908102919091010152506001909101905b6000190161122b565b50848110156112ad578083525b50505b9392505050565b600b602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b60266020526000908152604090205460ff1681565b6033602052600090815260409020546001600160a01b031681565b6003546001600160a01b031681565b60355481565b6002546001600160a01b031681565b601e5481565b603d5460ff1681565b61135c613d6a565b611368826000806121f4565b92915050565b6001546001600160a01b031690565b6022602052600090815260409020546001600160a01b031681565b6001546000906001600160a01b03166113af6128ba565b6001600160a01b031614905090565b60176020526000908152604090205481565b602c5481565b60008181526006602081815260408084206001808201548652600780855283872060020154888852600c86529387208054920154959094529201546001600160a01b0390911693919291908142821061142f5742611431565b815b905080821161144157600061145c565b61145c62015180610eb387610ea7868663ffffffff6126b316565b925050509193509193565b602f5481565b60205481565b602d546001600160a01b031681565b601d6020526000908152604090205481565b601c6020526000908152604090205481565b6037546001600160a01b031681565b6004546001600160a01b031681565b60366020526000908152604090205481565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015496860154600787015460088801546009890154600a8a0154600b909a0154989a9799969860ff909616979496949593949293919290916001600160a01b0391821691168c565b611550611398565b61156c5760405162461bcd60e51b81526004016103dd90614f72565b6337aa6d1960e21b600081905260056020527fa56283bb23bc3f9d1e31fd0b79ab29917294036597bcddbdbeb3da57495b10ad546001600160a01b0316906115b490836128be565b6115c563db35400d60e01b836128be565b6115d6630740ff7d60e51b836128be565b6115e76367e42e0360e11b836128be565b6115f8630917871d60e11b836128be565b611609630d1979fb60e41b836128be565b61161a639b16cd8760e01b836128be565b61162a62a8ff9960e21b836128be565b61163b638932f5f760e01b836128be565b61164c6318215f0b60e21b836128be565b6e4c6f616e4d61696e74656e616e636560881b826001600160a01b0316826001600160a01b03167f1420e3a2094d671bc2eb897941fa3d94ffa37f0cb6d530651946250a2151cb7f60405160405180910390a45050565b6007602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949560ff8516956101009095046001600160a01b03908116959481169493169288565b603c60209081526000928352604080842090915290825290205481565b60006001600054146117365760405162461bcd60e51b81526004016103dd90614fd2565b6002600055603d5460ff161561175e5760405162461bcd60e51b81526004016103dd90614e72565b8461177b5760405162461bcd60e51b81526004016103dd90614f82565b6000868152600660209081526040808320600181015484526007909252909120600382015460ff166117bf5760405162461bcd60e51b81526004016103dd90614fc2565b8515806117d85750600a8201546001600160a01b031633145b806117fe575081546000908152600a6020908152604080832033845290915290205460ff165b61181a5760405162461bcd60e51b81526004016103dd90614f72565b60068101541561183c5760405162461bcd60e51b81526004016103dd90614ea2565b3415806118645750851580156118645750602d5460028201546001600160a01b039081169116145b6118805760405162461bcd60e51b81526004016103dd90614ed2565b600b82015460028201546118a0916001600160a01b03908116911661257a565b81546000818152600c6020526040902060028301546003840154600a86015492936118e093859391926001600160a01b0392831692908116911642612658565b6000836007015442111561195057600784015461190490429063ffffffff6126b316565b825490915061191a90829063ffffffff6126f516565b905061192f816201518063ffffffff61272f16565b90508089116119505760405162461bcd60e51b81526004016103dd90614eb2565b87156119d15760408051610100808201835285548252600186015460ff811615156020840152046001600160a01b039081169282019290925260028501548216606082015260038501549091166080820152600484015460a0820152600584015460c0820152600684015460e08201526119cc9085908b612934565b611a18565b346119ef5760028301546119cc906001600160a01b0316338b612a60565b883414611a0e5760405162461bcd60e51b81526004016103dd90615032565b611a183334612ac4565b8015611a5257611a2e898263ffffffff6126b316565b600b8501546002850154919a50611a52916001600160a01b03918216911683612b6a565b8154611a6b90610eb38b6201518063ffffffff6126f516565b6007850154909550611a83908663ffffffff61219516565b600785018190554210611aa85760405162461bcd60e51b81526004016103dd90614ee2565b6007840154600090611ac0904263ffffffff6126b316565b9050610e108111611ae35760405162461bcd60e51b81526004016103dd90614ee2565b6001830154611af8908b63ffffffff61219516565b6001840155600b858101546001600160a01b039081166000908152602092835260408082206002808a01549094168352909352919091200154611b41908b63ffffffff61219516565b600b958601546001600160a01b03908116600090815260209788526040808220600298890154909316825291909752862090940193909355505060019091555095945050505050565b600080600080600080611b9b613df5565b506001600160a01b038089166000908152600b60209081526040808320938b16835292815290829020825160a081018452815481526001820154928101839052600282015493810193909352600381015460608401526004015460808301819052611c1b916201518091610eb39190610ea790429063ffffffff6126b316565b93508060400151841115611c3157806040015193505b606081015180611c42576000611c48565b81608001515b60208301516080840151611c5d576000611c5f565b865b6015549451939d929c50909a509850919650945092505050565b6038546001600160a01b031681565b60275481565b60196020526000908152604090205481565b6000600160005414611cc45760405162461bcd60e51b81526004016103dd90614fd2565b6002600055603d5460ff1615611cec5760405162461bcd60e51b81526004016103dd90614e72565b81611d095760405162461bcd60e51b81526004016103dd90614e62565b6000848152600660209081526040808320600181015484526007909252909120600382015460ff16611d4d5760405162461bcd60e51b81526004016103dd90614fc2565b600a8201546001600160a01b0316331480611d83575081546000908152600a6020908152604080832033845290915290205460ff165b611d9f5760405162461bcd60e51b81526004016103dd90614f72565b600280549082015460038301546004808601546005808801549087015460405163f80b25fb60e01b81526000976001600160a01b039081169763f80b25fb97611df397918316969216949193919201614c59565b60206040518083038186803b158015611e0b57600080fd5b505afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e4391908101906141ea565b905080851115611e5557809350611e59565b8493505b6005830154611e6e908563ffffffff6126b316565b6005840155602d5460038301546001600160a01b0390811691161415611e9d57611e988685612771565b611eb6565b6003820154611eb6906001600160a01b03168786612849565b50506001600055509392505050565b600160005414611ee75760405162461bcd60e51b81526004016103dd90614fd2565b6002600055603d5460ff1615611f0f5760405162461bcd60e51b81526004016103dd90614e72565b80611f2c5760405162461bcd60e51b81526004016103dd90614f82565b6000828152600660209081526040808320600181015484526007909252909120600382015460ff16611f705760405162461bcd60e51b81526004016103dd90614fc2565b341580611f8f5750602d5460038201546001600160a01b039081169116145b611fab5760405162461bcd60e51b81526004016103dd90614ed2565b6005820154611fc0908463ffffffff61219516565b600583015534611fe8576003810154611fe3906001600160a01b03163385612a60565b612011565b8234146120075760405162461bcd60e51b81526004016103dd90615032565b6120113334612ac4565b60028054600383015491830154604051630a7549df60e21b81526000936001600160a01b03938416936329d5277c936120539392821692911690600401614b48565b604080518083038186803b15801561206a57600080fd5b505afa15801561207e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120a29190810190614208565b5090507fc3c4f75ea99730f240c3ea8d68f7a9b94584539caf936f566e8b9f8fe13036f48585836040516120d893929190614e35565b60405180910390a150506001600055505050565b603d5460ff161561210f5760405162461bcd60e51b81526004016103dd90614e72565b612119338261257a565b50565b6014546001600160a01b031681565b601b5481565b60285481565b61213f611398565b61215b5760405162461bcd60e51b81526004016103dd90614f72565b61211981612c01565b60395481565b60215481565b602e546001600160a01b031681565b6030546001600160a01b031681565b6001015490565b6000828201838110156112b05760405162461bcd60e51b81526004016103dd90614ec2565b60008183106121c957816112b0565b5090919050565b60008260010182815481106121e157fe5b9060005260206000200154905092915050565b6121fc613d6a565b612204613e24565b5060008481526006602081815260409283902083516101808101855281548152600182015492810192909252600281015493820193909352600383015460ff161515606082015260048301546080820152600583015460a08201529082015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a8201546001600160a01b03908116610140830152600b909201549091166101608201526122b5613e88565b506020808201516000908152600782526040908190208151610100808201845282548252600183015460ff81161515958301959095526001600160a01b03940484169281019290925260028101548316606083015260038101549092166080820152600482015460a0820152600582015460c082015260069091015460e082015284156123735784600114801561234f575060e081015115155b806123675750846002148015612367575060e0810151155b61237357506112b09050565b61237b613ecc565b506000868152600c6020908152604080832081516060808201845282548252600183015494820194909452600291820154818401529054928501516080808701519088015160a089015194516317f8680960e11b815293969586956001600160a01b0390911694632ff0d012946123fa94909390929091600401614c31565b604080518083038186803b15801561241157600080fd5b505afa158015612425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124499190810190614208565b915091506000808560c00151841161247f5761247487608001518860a00151868960c0015187612c83565b509092509050612492565b881561249257506112b095505050505050565b604051806101e001604052808c815260200187606001516001600160a01b0316815260200187608001516001600160a01b03168152602001886080015181526020018860a00151815260200186600001518152602001428960e0015110156124fb576000612521565b61252162015180610eb38960000151610ea7428e60e001516126b390919063ffffffff16565b8152602001886101200151815260200188610100015181526020018760c0015181526020018581526020018760e0015181526020018860e001518152602001838152602001828152509750505050505050509392505050565b6001600160a01b038083166000908152600b6020908152604080832093851683529290529081206001810154909190158015906125ba5750600482015415155b1561264b576125e562015180610eb38460010154610ea78660040154426126b390919063ffffffff16565b4260048401556002830154909150811115612601575060028101545b801561264657600382015461261c908263ffffffff61219516565b60038301556002820154612636908263ffffffff6126b316565b6002830155612646848483612b6a565b612652565b4260048301555b50505050565b600061268e6a07259756a8d61998000000610eb3601554610ea78b60000154610ea78d60020154896126b390919063ffffffff16565b60028801839055905080156126aa576126aa8387878785612db7565b50505050505050565b60006112b083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613102565b60008261270457506000611368565b8282028284828161271157fe5b04146112b05760405162461bcd60e51b81526004016103dd90614f62565b60006112b083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061312e565b801561284557602d546001600160a01b031647808311156127ed57604051632e1a7d4d60e01b81526001600160a01b03831690632e1a7d4d906127ba9084870390600401615061565b600060405180830381600087803b1580156127d457600080fd5b505af11580156127e8573d6000803e3d6000fd5b505050505b6127f78484613165565b836001600160a01b0316826001600160a01b03167fc44aeefa68e8b9c1ad5f7be4b0dd194580f81f5c362862e72196503a320eb7a18560405161283a9190615061565b60405180910390a350505b5050565b80156128b5576128696001600160a01b038416838363ffffffff61320116565b816001600160a01b0316836001600160a01b03167fc44aeefa68e8b9c1ad5f7be4b0dd194580f81f5c362862e72196503a320eb7a1836040516128ac9190615061565b60405180910390a35b505050565b3390565b6001600160e01b03198216600090815260056020526040902080546001600160a01b0319166001600160a01b0383169081179091551561291957612913600d6001600160e01b0319841663ffffffff61325a16565b50612845565b6128b5600d6001600160e01b0319841663ffffffff6132a216565b600061297f84600001548460800151856060015187600a0160009054906101000a90046001600160a01b03168860050154600088600160405180602001604052806000815250613363565b50600586015490925061299991508263ffffffff6126b316565b60058501819055600254606085015160808601516004808901546040516317f8680960e11b81526000966001600160a01b0390961695632ff0d012956129e495909490939201614c31565b604080518083038186803b1580156129fb57600080fd5b505afa158015612a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a339190810190614208565b5090508360c001518111612a595760405162461bcd60e51b81526004016103dd90614f92565b5050505050565b80156128b557612a816001600160a01b03841683308463ffffffff6134c116565b816001600160a01b0316836001600160a01b03167f2790b90165fd3973ad7edde4eca71b4f8808dd4857a2a3a3e8ae5642a5cb196e836040516128ac9190615061565b602d5460408051630d0e30db60e41b815290516001600160a01b0390921691829163d0e30db091859160048082019260009290919082900301818588803b158015612b0e57600080fd5b505af1158015612b22573d6000803e3d6000fd5b5050505050826001600160a01b0316816001600160a01b03167f2790b90165fd3973ad7edde4eca71b4f8808dd4857a2a3a3e8ae5642a5cb196e846040516128ac9190615061565b6000612b8e68056bc75e2d63100000610eb3601554856126f590919063ffffffff16565b9050612b9b8484836134e5565b612bb58385612bb0858563ffffffff6126b316565b612849565b6001600160a01b038085169084167f220e66e3e759e1382aa86cd8af5abca05ebf3ad564f223ae62d977678337272a612bf4858563ffffffff6126b316565b60405161283a9190615061565b6001600160a01b038116612c275760405162461bcd60e51b81526004016103dd90614e92565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b602154600090819084861180612c97575083155b15612ca157612dac565b808611612cb5575086915085905084612dac565b6000612ccf86674563918244f4000063ffffffff61219516565b9050612cf268056bc75e2d63100000610eb38b610ea7858463ffffffff61219516565b9350612d20612d13670de0b6b3a7640000610eb38b8963ffffffff6126f516565b859063ffffffff6126b316565b9350612d4e612d35828463ffffffff6126b316565b610eb38668056bc75e2d6310000063ffffffff6126f516565b935088841115612d5c578893505b612d85612d788368056bc75e2d6310000063ffffffff61219516565b859063ffffffff6126f516565b9250612d9c6064610eb3858863ffffffff61272f16565b925087831115612daa578792505b505b955095509592505050565b602f546002546001600160a01b038581166000908152603c602090815260408083208885168452909152812054909392919091169015612e1a576001600160a01b038087166000908152603c602090815260408083209389168352929052205491505b6037546000906060906001600160a01b038085169163d138f9a160e01b918b9116612e5868056bc75e2d63100000610eb38c8b63ffffffff6126f516565b604051602401612e6a93929190614c09565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612ea89190614b23565b600060405180830381855afa9150503d8060008114612ee3576040519150601f19603f3d011682016040523d82523d6000602084013e612ee8565b606091505b50915091506001821415612efe57602081015194505b84156130f65760375460385460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612f3a929116908990600401614c9b565b602060405180830381600087803b158015612f5457600080fd5b505af1158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f8c9190810190614087565b50603854603f546040516000926001600160a01b031691612fb3918e918a91602401614cb6565b60408051601f198184030181529181526020820180516001600160e01b0316630efe6a8b60e01b17905251612fe89190614b23565b6000604051808303816000865af19150503d8060008114613025576040519150601f19603f3d011682016040523d82523d6000602084013e61302a565b606091505b5050905080156130a157601f54613047908763ffffffff61219516565b601f55603754603f546040518c926001600160a01b0390811692908f16917ff41c644671512f1cda76abfe6038e3d7d526c1377a5a8c692f81703901db215091613094918b918d91614e35565b60405180910390a46130f4565b603754603f546040518c926001600160a01b0390811692908f16917f483f67ea49f76ac15e15bbad68b52788ca47d50aef1e4acfe95e5e307e710812916130eb918b918d91614e35565b60405180910390a45b505b50505050505050505050565b600081848411156131265760405162461bcd60e51b81526004016103dd9190614e51565b505050900390565b6000818361314f5760405162461bcd60e51b81526004016103dd9190614e51565b50600083858161315b57fe5b0495945050505050565b804710156131855760405162461bcd60e51b81526004016103dd90614f22565b6000826001600160a01b03168260405161319e90614b2f565b60006040518083038185875af1925050503d80600081146131db576040519150601f19603f3d011682016040523d82523d6000602084013e6131e0565b606091505b50509050806128b55760405162461bcd60e51b81526004016103dd90614f12565b6040516128b590849063a9059cbb60e01b906132239086908690602401614c9b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613566565b6000613266838361364b565b61329a5750600180830180548083018083556000928352602080842090920185905584835290859052604090912055611368565b506000611368565b60006132ae838361364b565b1561329a57600082815260208490526040902054600184015460001991820191018082146133265760008560010182815481106132e757fe5b906000526020600020015490508086600101848154811061330457fe5b6000918252602080832090910192909255918252869052604090206001830190555b6000848152602086905260408120556001850180548061334257fe5b60019003818190600052602060002001600090559055600192505050611368565b6040805160a0810182526001600160a01b03808b16825289811660208084019190915230838501819052606080850191909152918a166080840152835191820184528882528101879052918201859052600091829182916133c891908e888886613660565b90935091506133d78b83613885565b600254602754604051631e2c62d360e01b81526001600160a01b0390921691631e2c62d391613410918f918f9188918a91600401614c59565b60206040518083038186803b15801561342857600080fd5b505afa15801561343c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061346091908101906141ea565b9050896001600160a01b03168b6001600160a01b03168d7fb4eb3c9b62efcce7021cba5fd9cd0c44df91c2272806ccc5e57df7c912e8d7168c86886040516134aa93929190614cb6565b60405180910390a499509950999650505050505050565b6040516126529085906323b872dd60e01b9061322390879087908790602401614c09565b80156128b5576001600160a01b038216600090815260166020526040902054613514908263ffffffff61219516565b6001600160a01b0380841660008181526016602052604090819020939093559151908516907f40a75ae5f7a5336e75f7c7977e12c4b46a9ac0f30de01a2d5b6c1a4f4af63587906128ac908590615061565b613578826001600160a01b0316613953565b6135945760405162461bcd60e51b81526004016103dd90615042565b60006060836001600160a01b0316836040516135b09190614b23565b6000604051808303816000865af19150503d80600081146135ed576040519150601f19603f3d011682016040523d82523d6000602084013e6135f2565b606091505b5091509150816136145760405162461bcd60e51b81526004016103dd90614ef2565b805115612652578080602001905161362f9190810190614087565b6126525760405162461bcd60e51b81526004016103dd90614ff2565b60009081526020919091526040902054151590565b845160009081901515806136775750602087015115155b6136935760405162461bcd60e51b81526004016103dd90614fb2565b60208701516136a457865160208801525b6020870151875111156136c95760405162461bcd60e51b81526004016103dd90614f32565b6000806000876137865760408a01516137455785156136fa576136f38a60005b602002015161398f565b905061370e565b61370b8a60005b60200201516139bf565b90505b80156137405760808b01518b5161373191908b908e60015b6020020151856139e3565b895161373d90826126b3565b8a525b613786565b851561375d576137568a60026136e9565b905061376b565b6137688a6002613701565b90505b80156137865760408a01516137809082612195565b60408b01525b8651156137a55760405162461bcd60e51b81526004016103dd90614fe2565b6137af8b8b613b33565b60408c015191945092506137fb57895182146137dd5760405162461bcd60e51b81526004016103dd90615022565b80156137f6576137f3828263ffffffff61219516565b91505b613875565b60208a015182111561381f5760405162461bcd60e51b81526004016103dd90614f02565b60408a01518310156138435760405162461bcd60e51b81526004016103dd90614e82565b80156138755760808b015160208c015161386291908b908e6000613726565b613872838263ffffffff6126b316565b92505b5090999098509650505050505050565b60295480156128b557602d546000906001600160a01b03858116911614156138ae575081613933565b600254604051635967aa7560e11b81526001600160a01b039091169063b2cf54ea906138e09087908790600401614c9b565b60206040518083038186803b1580156138f857600080fd5b505afa15801561390c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061393091908101906141ea565b90505b818111156126525760405162461bcd60e51b81526004016103dd90614f52565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061398757508115155b949350505050565b600061136868056bc75e2d631000006139b3603e54856126f590919063ffffffff16565b9063ffffffff613c4516565b600061136868056bc75e2d631000006139b3601854856126f590919063ffffffff16565b808015613b2b576001600160a01b038681166000908152603360205260409020541615613a99576001600160a01b03808716600090815260336020526040902054613a319116878684613c87565b5050613a96613a5868056bc75e2d63100000610eb3603954856126f590919063ffffffff16565b613a8a613a7d68056bc75e2d63100000610eb3602054876126f590919063ffffffff16565b849063ffffffff6126b316565b9063ffffffff6126b316565b90505b6001600160a01b038416600090815260196020526040902054613ac2908263ffffffff61219516565b6001600160a01b03808616600081815260196020526040908190209390935591518792918916907fb23479169712c443e6b00fb0cec3506a5f5926f541df4243d313e11c8c5c71ed90613b16908690615061565b60405180910390a4613b2b8686868686612db7565b505050505050565b815160208084015160408086015160608781015187519588015188850151945160009889989497630957ba1160e21b97613b7a979296919592949293919291602401614b63565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260035491519092506000916001600160a01b031690613bcc908490614b23565b600060405180830381855af49150503d8060008114613c07576040519150601f19603f3d011682016040523d82523d6000602084013e613c0c565b606091505b509250905080613c2e5760405162461bcd60e51b81526004016103dd90615012565b602082015193506040820151925050509250929050565b60006112b083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d20565b6031546040516306a688ff60e11b815260009182916001600160a01b0390911690630d4d11fe90613cc2908990899089908990600401614bcb565b6040805180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613d139190810190614208565b9097909650945050505050565b60008183613d415760405162461bcd60e51b81526004016103dd9190614e51565b5083613d4f575060006112b0565b6000836001860381613d5d57fe5b0460010195945050505050565b604051806101e001604052806000801916815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915290565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b60405180606001604052806000815260200160008152602001600081525090565b803561136881615169565b80356113688161517d565b80516113688161517d565b803561136881615186565b80356113688161518f565b60008083601f840112613f3657600080fd5b50813567ffffffffffffffff811115613f4e57600080fd5b602083019150836001820283011115613f6657600080fd5b9250929050565b805161136881615186565b600060208284031215613f8a57600080fd5b60006139878484613eed565b60008060408385031215613fa957600080fd5b6000613fb58585613eed565b9250506020613fc685828601613eed565b9150509250929050565b60008060408385031215613fe357600080fd5b6000613fef8585613eed565b9250506020613fc685828601613f0e565b60008060008060008060c0878903121561401957600080fd5b60006140258989613eed565b965050602061403689828a01613f0e565b955050604061404789828a01613f0e565b945050606061405889828a01613f0e565b935050608061406989828a01613ef8565b92505060a061407a89828a01613ef8565b9150509295509295509295565b60006020828403121561409957600080fd5b60006139878484613f03565b6000602082840312156140b757600080fd5b60006139878484613f0e565b600080604083850312156140d657600080fd5b6000613fb58585613f0e565b6000806000606084860312156140f757600080fd5b60006141038686613f0e565b935050602061411486828701613eed565b925050604061412586828701613f0e565b9150509250925092565b6000806040838503121561414257600080fd5b6000613fef8585613f0e565b60008060008060006080868803121561416657600080fd5b60006141728888613f0e565b955050602061418388828901613f0e565b945050604061419488828901613ef8565b935050606086013567ffffffffffffffff8111156141b157600080fd5b6141bd88828901613f24565b92509250509295509295909350565b6000602082840312156141de57600080fd5b60006139878484613f19565b6000602082840312156141fc57600080fd5b60006139878484613f6d565b6000806040838503121561421b57600080fd5b60006142278585613f6d565b9250506020613fc685828601613f6d565b60008060006060848603121561424d57600080fd5b60006142598686613f0e565b935050602061426a86828701613f0e565b925050604061412586828701613ef8565b600061428783836149f9565b50506101e00190565b614299816150fc565b82525050565b60006142aa826150ea565b6142b481856150ee565b93506142bf836150e4565b8060005b838110156142ed5781516142d7888261427b565b97506142e2836150e4565b9250506001016142c3565b509495945050505050565b61429981615107565b6142998161510c565b6000614315826150ea565b61431f81856150f7565b935061432f818560208601615133565b9290920192915050565b61429981615128565b600061434d826150ea565b61435781856150ee565b9350614367818560208601615133565b6143708161515f565b9093019392505050565b60006143876013836150ee565b7207769746864726177416d6f756e74206973203606c1b815260200192915050565b60006143b66006836150ee565b6514185d5cd95960d21b815260200192915050565b60006143d8601b836150ee565b7f696e73756666696369656e742073776170206c69717569646974790000000000815260200192915050565b60006144116026836150ee565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006144596014836150ee565b73696e646566696e6974652d7465726d206f6e6c7960601b815260200192915050565b60006144896022836150ee565b7f6465706f7369742063616e6e6f7420636f766572206261636b20696e746572658152611cdd60f21b602082015260400192915050565b60006144cd601b836150ee565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006145066010836150ee565b6f1ddc9bdb99c8185cdcd95d081cd95b9d60821b815260200192915050565b6000614532600e836150ee565b6d1b1bd85b881d1bdbc81cda1bdc9d60921b815260200192915050565b600061455c6020836150ee565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b60006145956013836150ee565b72737761702066696c6c20746f6f206c6172676560681b815260200192915050565b60006145c4603a836150ee565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207281527f6563697069656e74206d61792068617665207265766572746564000000000000602082015260400192915050565b6000614623601d836150ee565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000815260200192915050565b600061465c601c836150ee565b7f736f75726365416d6f756e74206c6172676572207468616e206d617800000000815260200192915050565b60006146956018836150ee565b7f776974686472617720616d6f756e7420746f6f20686967680000000000000000815260200192915050565b60006146ce600e836150ee565b6d7377617020746f6f206c6172676560901b815260200192915050565b60006146f86021836150ee565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061473b600c836150ee565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b60006147636012836150ee565b7106465706f736974416d6f756e7420697320360741b815260200192915050565b60006147916012836150ee565b713ab73432b0b63a343c903837b9b4ba34b7b760711b815260200192915050565b60006147bf6014836150ee565b7319985b1b189858dac81b9bdd08185b1b1bddd95960621b815260200192915050565b60006147ef602e836150ee565b7f6d696e206f72206d617820736f7572636520746f6b656e20616d6f756e74206e81526d1959591cc81d1bc81899481cd95d60921b602082015260400192915050565b60006113686000836150f7565b600061484c600e836150ee565b6d1b1bd85b881a5cc818db1bdcd95960921b815260200192915050565b6000614876600c836150ee565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b600061489e600d836150ee565b6c696e76616c696420737461746560981b815260200192915050565b60006148c7602a836150ee565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b60006149136013836150ee565b721b1bd85b881d195c9b481a185cc8195b991959606a1b815260200192915050565b6000614942600b836150ee565b6a1cddd85c0819985a5b195960aa1b815260200192915050565b60006149696016836150ee565b751cddd85c081d1bdbc81b185c99d9481d1bc8199a5b1b60521b815260200192915050565b600061499b6016836150ee565b750cae8d0cae440c8cae0dee6d2e840dad2e6dac2e8c6d60531b815260200192915050565b60006149cd601f836150ee565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b80516101e0830190614a0b8482614301565b506020820151614a1e6020850182614290565b506040820151614a316040850182614290565b506060820151614a446060850182614301565b506080820151614a576080850182614301565b5060a0820151614a6a60a0850182614301565b5060c0820151614a7d60c0850182614301565b5060e0820151614a9060e0850182614301565b50610100820151614aa5610100850182614301565b50610120820151614aba610120850182614301565b50610140820151614acf610140850182614301565b50610160820151614ae4610160850182614301565b50610180820151614af9610180850182614301565b506101a0820151614b0e6101a0850182614301565b506101c08201516126526101c0850182614301565b60006112b0828461430a565b600061136882614832565b602081016113688284614290565b60408101614b568285614290565b6112b06020830184614290565b60e08101614b71828a614290565b614b7e6020830189614290565b614b8b6040830188614290565b614b986060830187614290565b614ba56080830186614301565b614bb260a0830185614301565b614bbf60c0830184614301565b98975050505050505050565b60808101614bd98287614290565b614be66020830186614290565b614bf36040830185614290565b614c006060830184614301565b95945050505050565b60608101614c178286614290565b614c246020830185614290565b6139876040830184614301565b60808101614c3f8287614290565b614c4c6020830186614290565b614bf36040830185614301565b60a08101614c678288614290565b614c746020830187614290565b614c816040830186614301565b614c8e6060830185614301565b610c826080830184614301565b60408101614ca98285614290565b6112b06020830184614301565b60608101614cc48286614290565b614c246020830185614301565b60808101614cdf8287614290565b614c4c6020830186614301565b602080825281016112b0818461429f565b6020810161136882846142f8565b6101008101614d1a828b614301565b614d27602083018a6142f8565b614d346040830189614290565b614d416060830188614290565b614d4e6080830187614290565b614d5b60a0830186614301565b614d6860c0830185614301565b614d7560e0830184614301565b9998505050505050505050565b6101808101614d91828f614301565b614d9e602083018e614301565b614dab604083018d614301565b614db8606083018c6142f8565b614dc5608083018b614301565b614dd260a083018a614301565b614ddf60c0830189614301565b614dec60e0830188614301565b614dfa610100830187614301565b614e08610120830186614301565b614e16610140830185614290565b614e24610160830184614290565b9d9c50505050505050505050505050565b60608101614cc48286614301565b602081016113688284614339565b602080825281016112b08184614342565b602080825281016113688161437a565b60208082528101611368816143a9565b60208082528101611368816143cb565b6020808252810161136881614404565b602080825281016113688161444c565b602080825281016113688161447c565b60208082528101611368816144c0565b60208082528101611368816144f9565b6020808252810161136881614525565b602080825281016113688161454f565b6020808252810161136881614588565b60208082528101611368816145b7565b6020808252810161136881614616565b602080825281016113688161464f565b6020808252810161136881614688565b60208082528101611368816146c1565b60208082528101611368816146eb565b602080825281016113688161472e565b6020808252810161136881614756565b6020808252810161136881614784565b60208082528101611368816147b2565b60208082528101611368816147e2565b602080825281016113688161483f565b6020808252810161136881614869565b6020808252810161136881614891565b60208082528101611368816148ba565b6020808252810161136881614906565b6020808252810161136881614935565b602080825281016113688161495c565b602080825281016113688161498e565b60208082528101611368816149c0565b6101e0810161136882846149f9565b602081016113688284614301565b60a0810161507d8288614301565b614c746020830187614301565b60c081016150988289614301565b6150a56020830188614301565b6150b26040830187614301565b6150bf6060830186614301565b6150cc6080830185614301565b6150d960a0830184614301565b979650505050505050565b60200190565b5190565b90815260200190565b919050565b60006113688261511c565b151590565b90565b6001600160e01b03191690565b6001600160a01b031690565b6000611368826150fc565b60005b8381101561514e578181015183820152602001615136565b838111156126525750506000910152565b601f01601f191690565b615172816150fc565b811461211957600080fd5b61517281615107565b6151728161510c565b6151728161510f56fea365627a7a72315820b3d093ffc265e335120e6e62403e08e98e698da67cd5b65ec32fcf17c887d7796c6578706572696d656e74616cf564736f6c63430005110040",
  "deployedBytecode": "0x6080604052600436106103b85760003560e01c80638f32d59b116101f2578063cfc85c061161010d578063e8f62764116100a0578063f589a3e71161006f578063f589a3e714610aeb578063f6ddc8b314610b00578063f706b1f214610b15578063f851a44014610b2a576103b8565b8063e8f6276414610a8c578063edab119f14610aa1578063f0e085f514610ab6578063f2fde38b14610acb576103b8565b8063d485045e116100dc578063d485045e14610a19578063db35400d14610a39578063dea9b46414610a59578063e81fefa014610a6c576103b8565b8063cfc85c06146109bc578063d1979fb0146109cf578063d288208c146109ef578063d473c2da14610a04576103b8565b8063b7e1524111610185578063c4a9081511610154578063c4a908151461090e578063c4d66de814610946578063cb6eacd114610968578063cd5d808d1461099c576103b8565b8063b7e15241146108a4578063b9cffa3e146108c4578063ba4861e9146108d9578063bdee453c146108ee576103b8565b8063acc04348116101c1578063acc0434814610838578063ae0a85301461084d578063afe8400914610862578063b30643d914610884576103b8565b80638f32d59b146107be57806392d894f8146107d3578063959083d3146107f35780639b16cd8714610808576103b8565b80634699f846116102e25780637420ca3e116102755780638456cb59116102445780638456cb59146107475780638932f5f71461075c5780638da5cb5b146107895780638dc48ba51461079e576103b8565b80637420ca3e146106f3578063742e67981461070857806378d849ed1461071d5780637a8faeb814610732576103b8565b806360857c2c116102b157806360857c2c1461066257806362fff3f61461068257806368c4ac26146106b35780636e663730146106d3576103b8565b80634699f846146105f45780634f28cac214610609578063569fc1fb1461061e578063574442cc1461064d576103b8565b806324cc57491161035a5780633452d2d4116103295780633452d2d4146105745780633fca506e146105945780634115a2b6146105b45780634203e395146105d4576103b8565b806324cc5749146104fd5780632a3240271461052a5780632f4707641461053f5780633432423c14610554576103b8565b8063122f0e3a11610396578063122f0e3a1461047057806317548b791461049d5780631b7bde74146104bd578063218b39c6146104dd576103b8565b806302a3fe64146103e6578063065d810f1461041c5780630676c1b71461044e575b3480156103c457600080fd5b5060405162461bcd60e51b81526004016103dd90614fa2565b60405180910390fd5b3480156103f257600080fd5b50610406610401366004614000565b610b3f565b6040516104139190614cec565b60405180910390f35b34801561042857600080fd5b5061043c610437366004613fd0565b610c8c565b6040516104139695949392919061508a565b34801561045a57600080fd5b50610463610ccc565b6040516104139190614b3a565b34801561047c57600080fd5b5061049061048b3660046140e2565b610cdb565b6040516104139190615061565b3480156104a957600080fd5b506104636104b83660046141cc565b61107b565b3480156104c957600080fd5b506104906104d8366004613f96565b611096565b3480156104e957600080fd5b506104636104f8366004613f78565b6110b3565b34801561050957600080fd5b5061051d610518366004613f78565b6110ce565b6040516104139190614cfd565b34801561053657600080fd5b506104906110e3565b34801561054b57600080fd5b506104906110e9565b34801561056057600080fd5b5061043c61056f366004613fd0565b6110ef565b34801561058057600080fd5b5061049061058f366004613f78565b61112f565b3480156105a057600080fd5b506104906105af366004613f78565b611141565b3480156105c057600080fd5b5061051d6105cf3660046140c3565b611153565b3480156105e057600080fd5b506104906105ef366004613f78565b611173565b34801561060057600080fd5b50610490611185565b34801561061557600080fd5b5061049061118b565b34801561062a57600080fd5b5061063e6106393660046140a5565b611191565b60405161041393929190614e35565b34801561065957600080fd5b506104906111b2565b34801561066e57600080fd5b5061040661067d366004614238565b6111b8565b34801561068e57600080fd5b506106a261069d366004613f96565b6112b7565b60405161041395949392919061506f565b3480156106bf57600080fd5b5061051d6106ce366004613f78565b6112f1565b3480156106df57600080fd5b506104636106ee366004613f78565b611306565b3480156106ff57600080fd5b50610463611321565b34801561071457600080fd5b50610490611330565b34801561072957600080fd5b50610463611336565b34801561073e57600080fd5b50610490611345565b34801561075357600080fd5b5061051d61134b565b34801561076857600080fd5b5061077c6107773660046140a5565b611354565b6040516104139190615052565b34801561079557600080fd5b5061046361136e565b3480156107aa57600080fd5b506104636107b9366004613f78565b61137d565b3480156107ca57600080fd5b5061051d611398565b3480156107df57600080fd5b506104906107ee366004613f78565b6113be565b3480156107ff57600080fd5b506104906113d0565b34801561081457600080fd5b506108286108233660046140a5565b6113d6565b6040516104139493929190614cd1565b34801561084457600080fd5b50610490611467565b34801561085957600080fd5b5061049061146d565b34801561086e57600080fd5b50610877611473565b6040516104139190614e43565b34801561089057600080fd5b5061049061089f366004613f78565b611482565b3480156108b057600080fd5b506104906108bf366004613f78565b611494565b3480156108d057600080fd5b506104636114a6565b3480156108e557600080fd5b506104636114b5565b3480156108fa57600080fd5b50610490610909366004613f78565b6114c4565b34801561091a57600080fd5b5061092e6109293660046140a5565b6114d6565b6040516104139c9b9a99989796959493929190614d82565b34801561095257600080fd5b50610966610961366004613f78565b611548565b005b34801561097457600080fd5b506109886109833660046140a5565b6116a3565b604051610413989796959493929190614d0b565b3480156109a857600080fd5b506104906109b7366004613f96565b6116f5565b6104906109ca36600461414e565b611712565b3480156109db57600080fd5b5061043c6109ea366004613f96565b611b8a565b3480156109fb57600080fd5b50610463611c79565b348015610a1057600080fd5b50610490611c88565b348015610a2557600080fd5b50610490610a34366004613f78565b611c8e565b348015610a4557600080fd5b50610490610a543660046140e2565b611ca0565b610966610a6736600461412f565b611ec5565b348015610a7857600080fd5b50610966610a87366004613f78565b6120ec565b348015610a9857600080fd5b5061046361211c565b348015610aad57600080fd5b5061049061212b565b348015610ac257600080fd5b50610490612131565b348015610ad757600080fd5b50610966610ae6366004613f78565b612137565b348015610af757600080fd5b50610490612164565b348015610b0c57600080fd5b5061049061216a565b348015610b2157600080fd5b50610463612170565b348015610b3657600080fd5b5061046361217f565b6060600083610b65576001600160a01b0388166000908152601260205260409020610b7e565b6001600160a01b03881660009081526011602052604090205b90506000610baa610b8e8361218e565b610b9e8a8a63ffffffff61219516565b9063ffffffff6121ba16565b9050808810610bbb5750610c829050565b86604051908082528060200260200182016040528015610bf557816020015b610be2613d6a565b815260200190600190039081610bda5790505b50925060008882035b8015610c715788821415610c1157610c71565b610c19613d6a565b610c39610c3286600019858f010163ffffffff6121d016565b8a896121f4565b8051909150610c485750610c68565b80868481518110610c5557fe5b6020908102919091010152506001909101905b60001901610bfe565b5087811015610c7e578084525b5050505b9695505050505050565b6009602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b6031546001600160a01b031681565b6000600160005414610cff5760405162461bcd60e51b81526004016103dd90614fd2565b6002600055603d5460ff1615610d275760405162461bcd60e51b81526004016103dd90614e72565b81610d445760405162461bcd60e51b81526004016103dd90614e62565b6000848152600660209081526040808320600181015484526007909252909120600382015460ff16610d885760405162461bcd60e51b81526004016103dd90614fc2565b600a8201546001600160a01b0316331480610dbe575081546000908152600a6020908152604080832033845290915290205460ff165b610dda5760405162461bcd60e51b81526004016103dd90614f72565b600681015415610dfc5760405162461bcd60e51b81526004016103dd90614ea2565b42826007015411610e1f5760405162461bcd60e51b81526004016103dd90615002565b600b8201546002820154610e3f916001600160a01b03908116911661257a565b81546000818152600c6020526040902060028301546003840154600a8601549293610e7f93859391926001600160a01b0392831692908116911642612658565b6000610ebf62015180610eb38460000154610ea74289600701546126b390919063ffffffff16565b9063ffffffff6126f516565b9063ffffffff61272f16565b9050808610610ee05760405162461bcd60e51b81526004016103dd90614f42565b602d5460028401546001600160a01b0390811691161415610f0a57610f058787612771565b610f23565b6002830154610f23906001600160a01b03168888612849565b8154610f3c90610eb3886201518063ffffffff6126f516565b945084846007015411610f615760405162461bcd60e51b81526004016103dd90614ee2565b6007840154610f76908663ffffffff6126b316565b600785018190554210610f9b5760405162461bcd60e51b81526004016103dd90614ee2565b6007840154600090610fb3904263ffffffff6126b316565b9050610e108111610fd65760405162461bcd60e51b81526004016103dd90614ee2565b6001830154610feb908863ffffffff6126b316565b6001840155600b858101546001600160a01b039081166000908152602092835260408082206002808a01549094168352909352919091200154611034908863ffffffff6126b316565b600b958601546001600160a01b0390811660009081526020978852604080822060029889015490931682529190975286209094019390935550506001909155509392505050565b6005602052600090815260409020546001600160a01b031681565b603b60209081526000928352604080842090915290825290205481565b6023602052600090815260409020546001600160a01b031681565b60326020526000908152604090205460ff1681565b60185481565b601f5481565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b601a6020526000908152604090205481565b602a6020526000908152604090205481565b600a60209081526000928352604080842090915290825290205460ff1681565b60166020526000908152604090205481565b60155481565b60295481565b600c6020526000908152604090208054600182015460029092015490919083565b602b5481565b606060006111d96111c9600f61218e565b610b9e878763ffffffff61219516565b90508085106111e857506112b0565b8360405190808252806020026020018201604052801561122257816020015b61120f613d6a565b8152602001906001900390816112075790505b50915060008582035b80156112a0578582141561123e576112a0565b611246613d6a565b611268611260600f600019858c010163ffffffff6121d016565b6000886121f4565b80519091506112775750611297565b8085848151811061128457fe5b6020908102919091010152506001909101905b6000190161122b565b50848110156112ad578083525b50505b9392505050565b600b602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b60266020526000908152604090205460ff1681565b6033602052600090815260409020546001600160a01b031681565b6003546001600160a01b031681565b60355481565b6002546001600160a01b031681565b601e5481565b603d5460ff1681565b61135c613d6a565b611368826000806121f4565b92915050565b6001546001600160a01b031690565b6022602052600090815260409020546001600160a01b031681565b6001546000906001600160a01b03166113af6128ba565b6001600160a01b031614905090565b60176020526000908152604090205481565b602c5481565b60008181526006602081815260408084206001808201548652600780855283872060020154888852600c86529387208054920154959094529201546001600160a01b0390911693919291908142821061142f5742611431565b815b905080821161144157600061145c565b61145c62015180610eb387610ea7868663ffffffff6126b316565b925050509193509193565b602f5481565b60205481565b602d546001600160a01b031681565b601d6020526000908152604090205481565b601c6020526000908152604090205481565b6037546001600160a01b031681565b6004546001600160a01b031681565b60366020526000908152604090205481565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015496860154600787015460088801546009890154600a8a0154600b909a0154989a9799969860ff909616979496949593949293919290916001600160a01b0391821691168c565b611550611398565b61156c5760405162461bcd60e51b81526004016103dd90614f72565b6337aa6d1960e21b600081905260056020527fa56283bb23bc3f9d1e31fd0b79ab29917294036597bcddbdbeb3da57495b10ad546001600160a01b0316906115b490836128be565b6115c563db35400d60e01b836128be565b6115d6630740ff7d60e51b836128be565b6115e76367e42e0360e11b836128be565b6115f8630917871d60e11b836128be565b611609630d1979fb60e41b836128be565b61161a639b16cd8760e01b836128be565b61162a62a8ff9960e21b836128be565b61163b638932f5f760e01b836128be565b61164c6318215f0b60e21b836128be565b6e4c6f616e4d61696e74656e616e636560881b826001600160a01b0316826001600160a01b03167f1420e3a2094d671bc2eb897941fa3d94ffa37f0cb6d530651946250a2151cb7f60405160405180910390a45050565b6007602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949560ff8516956101009095046001600160a01b03908116959481169493169288565b603c60209081526000928352604080842090915290825290205481565b60006001600054146117365760405162461bcd60e51b81526004016103dd90614fd2565b6002600055603d5460ff161561175e5760405162461bcd60e51b81526004016103dd90614e72565b8461177b5760405162461bcd60e51b81526004016103dd90614f82565b6000868152600660209081526040808320600181015484526007909252909120600382015460ff166117bf5760405162461bcd60e51b81526004016103dd90614fc2565b8515806117d85750600a8201546001600160a01b031633145b806117fe575081546000908152600a6020908152604080832033845290915290205460ff165b61181a5760405162461bcd60e51b81526004016103dd90614f72565b60068101541561183c5760405162461bcd60e51b81526004016103dd90614ea2565b3415806118645750851580156118645750602d5460028201546001600160a01b039081169116145b6118805760405162461bcd60e51b81526004016103dd90614ed2565b600b82015460028201546118a0916001600160a01b03908116911661257a565b81546000818152600c6020526040902060028301546003840154600a86015492936118e093859391926001600160a01b0392831692908116911642612658565b6000836007015442111561195057600784015461190490429063ffffffff6126b316565b825490915061191a90829063ffffffff6126f516565b905061192f816201518063ffffffff61272f16565b90508089116119505760405162461bcd60e51b81526004016103dd90614eb2565b87156119d15760408051610100808201835285548252600186015460ff811615156020840152046001600160a01b039081169282019290925260028501548216606082015260038501549091166080820152600484015460a0820152600584015460c0820152600684015460e08201526119cc9085908b612934565b611a18565b346119ef5760028301546119cc906001600160a01b0316338b612a60565b883414611a0e5760405162461bcd60e51b81526004016103dd90615032565b611a183334612ac4565b8015611a5257611a2e898263ffffffff6126b316565b600b8501546002850154919a50611a52916001600160a01b03918216911683612b6a565b8154611a6b90610eb38b6201518063ffffffff6126f516565b6007850154909550611a83908663ffffffff61219516565b600785018190554210611aa85760405162461bcd60e51b81526004016103dd90614ee2565b6007840154600090611ac0904263ffffffff6126b316565b9050610e108111611ae35760405162461bcd60e51b81526004016103dd90614ee2565b6001830154611af8908b63ffffffff61219516565b6001840155600b858101546001600160a01b039081166000908152602092835260408082206002808a01549094168352909352919091200154611b41908b63ffffffff61219516565b600b958601546001600160a01b03908116600090815260209788526040808220600298890154909316825291909752862090940193909355505060019091555095945050505050565b600080600080600080611b9b613df5565b506001600160a01b038089166000908152600b60209081526040808320938b16835292815290829020825160a081018452815481526001820154928101839052600282015493810193909352600381015460608401526004015460808301819052611c1b916201518091610eb39190610ea790429063ffffffff6126b316565b93508060400151841115611c3157806040015193505b606081015180611c42576000611c48565b81608001515b60208301516080840151611c5d576000611c5f565b865b6015549451939d929c50909a509850919650945092505050565b6038546001600160a01b031681565b60275481565b60196020526000908152604090205481565b6000600160005414611cc45760405162461bcd60e51b81526004016103dd90614fd2565b6002600055603d5460ff1615611cec5760405162461bcd60e51b81526004016103dd90614e72565b81611d095760405162461bcd60e51b81526004016103dd90614e62565b6000848152600660209081526040808320600181015484526007909252909120600382015460ff16611d4d5760405162461bcd60e51b81526004016103dd90614fc2565b600a8201546001600160a01b0316331480611d83575081546000908152600a6020908152604080832033845290915290205460ff165b611d9f5760405162461bcd60e51b81526004016103dd90614f72565b600280549082015460038301546004808601546005808801549087015460405163f80b25fb60e01b81526000976001600160a01b039081169763f80b25fb97611df397918316969216949193919201614c59565b60206040518083038186803b158015611e0b57600080fd5b505afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e4391908101906141ea565b905080851115611e5557809350611e59565b8493505b6005830154611e6e908563ffffffff6126b316565b6005840155602d5460038301546001600160a01b0390811691161415611e9d57611e988685612771565b611eb6565b6003820154611eb6906001600160a01b03168786612849565b50506001600055509392505050565b600160005414611ee75760405162461bcd60e51b81526004016103dd90614fd2565b6002600055603d5460ff1615611f0f5760405162461bcd60e51b81526004016103dd90614e72565b80611f2c5760405162461bcd60e51b81526004016103dd90614f82565b6000828152600660209081526040808320600181015484526007909252909120600382015460ff16611f705760405162461bcd60e51b81526004016103dd90614fc2565b341580611f8f5750602d5460038201546001600160a01b039081169116145b611fab5760405162461bcd60e51b81526004016103dd90614ed2565b6005820154611fc0908463ffffffff61219516565b600583015534611fe8576003810154611fe3906001600160a01b03163385612a60565b612011565b8234146120075760405162461bcd60e51b81526004016103dd90615032565b6120113334612ac4565b60028054600383015491830154604051630a7549df60e21b81526000936001600160a01b03938416936329d5277c936120539392821692911690600401614b48565b604080518083038186803b15801561206a57600080fd5b505afa15801561207e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120a29190810190614208565b5090507fc3c4f75ea99730f240c3ea8d68f7a9b94584539caf936f566e8b9f8fe13036f48585836040516120d893929190614e35565b60405180910390a150506001600055505050565b603d5460ff161561210f5760405162461bcd60e51b81526004016103dd90614e72565b612119338261257a565b50565b6014546001600160a01b031681565b601b5481565b60285481565b61213f611398565b61215b5760405162461bcd60e51b81526004016103dd90614f72565b61211981612c01565b60395481565b60215481565b602e546001600160a01b031681565b6030546001600160a01b031681565b6001015490565b6000828201838110156112b05760405162461bcd60e51b81526004016103dd90614ec2565b60008183106121c957816112b0565b5090919050565b60008260010182815481106121e157fe5b9060005260206000200154905092915050565b6121fc613d6a565b612204613e24565b5060008481526006602081815260409283902083516101808101855281548152600182015492810192909252600281015493820193909352600383015460ff161515606082015260048301546080820152600583015460a08201529082015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a8201546001600160a01b03908116610140830152600b909201549091166101608201526122b5613e88565b506020808201516000908152600782526040908190208151610100808201845282548252600183015460ff81161515958301959095526001600160a01b03940484169281019290925260028101548316606083015260038101549092166080820152600482015460a0820152600582015460c082015260069091015460e082015284156123735784600114801561234f575060e081015115155b806123675750846002148015612367575060e0810151155b61237357506112b09050565b61237b613ecc565b506000868152600c6020908152604080832081516060808201845282548252600183015494820194909452600291820154818401529054928501516080808701519088015160a089015194516317f8680960e11b815293969586956001600160a01b0390911694632ff0d012946123fa94909390929091600401614c31565b604080518083038186803b15801561241157600080fd5b505afa158015612425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124499190810190614208565b915091506000808560c00151841161247f5761247487608001518860a00151868960c0015187612c83565b509092509050612492565b881561249257506112b095505050505050565b604051806101e001604052808c815260200187606001516001600160a01b0316815260200187608001516001600160a01b03168152602001886080015181526020018860a00151815260200186600001518152602001428960e0015110156124fb576000612521565b61252162015180610eb38960000151610ea7428e60e001516126b390919063ffffffff16565b8152602001886101200151815260200188610100015181526020018760c0015181526020018581526020018760e0015181526020018860e001518152602001838152602001828152509750505050505050509392505050565b6001600160a01b038083166000908152600b6020908152604080832093851683529290529081206001810154909190158015906125ba5750600482015415155b1561264b576125e562015180610eb38460010154610ea78660040154426126b390919063ffffffff16565b4260048401556002830154909150811115612601575060028101545b801561264657600382015461261c908263ffffffff61219516565b60038301556002820154612636908263ffffffff6126b316565b6002830155612646848483612b6a565b612652565b4260048301555b50505050565b600061268e6a07259756a8d61998000000610eb3601554610ea78b60000154610ea78d60020154896126b390919063ffffffff16565b60028801839055905080156126aa576126aa8387878785612db7565b50505050505050565b60006112b083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613102565b60008261270457506000611368565b8282028284828161271157fe5b04146112b05760405162461bcd60e51b81526004016103dd90614f62565b60006112b083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061312e565b801561284557602d546001600160a01b031647808311156127ed57604051632e1a7d4d60e01b81526001600160a01b03831690632e1a7d4d906127ba9084870390600401615061565b600060405180830381600087803b1580156127d457600080fd5b505af11580156127e8573d6000803e3d6000fd5b505050505b6127f78484613165565b836001600160a01b0316826001600160a01b03167fc44aeefa68e8b9c1ad5f7be4b0dd194580f81f5c362862e72196503a320eb7a18560405161283a9190615061565b60405180910390a350505b5050565b80156128b5576128696001600160a01b038416838363ffffffff61320116565b816001600160a01b0316836001600160a01b03167fc44aeefa68e8b9c1ad5f7be4b0dd194580f81f5c362862e72196503a320eb7a1836040516128ac9190615061565b60405180910390a35b505050565b3390565b6001600160e01b03198216600090815260056020526040902080546001600160a01b0319166001600160a01b0383169081179091551561291957612913600d6001600160e01b0319841663ffffffff61325a16565b50612845565b6128b5600d6001600160e01b0319841663ffffffff6132a216565b600061297f84600001548460800151856060015187600a0160009054906101000a90046001600160a01b03168860050154600088600160405180602001604052806000815250613363565b50600586015490925061299991508263ffffffff6126b316565b60058501819055600254606085015160808601516004808901546040516317f8680960e11b81526000966001600160a01b0390961695632ff0d012956129e495909490939201614c31565b604080518083038186803b1580156129fb57600080fd5b505afa158015612a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a339190810190614208565b5090508360c001518111612a595760405162461bcd60e51b81526004016103dd90614f92565b5050505050565b80156128b557612a816001600160a01b03841683308463ffffffff6134c116565b816001600160a01b0316836001600160a01b03167f2790b90165fd3973ad7edde4eca71b4f8808dd4857a2a3a3e8ae5642a5cb196e836040516128ac9190615061565b602d5460408051630d0e30db60e41b815290516001600160a01b0390921691829163d0e30db091859160048082019260009290919082900301818588803b158015612b0e57600080fd5b505af1158015612b22573d6000803e3d6000fd5b5050505050826001600160a01b0316816001600160a01b03167f2790b90165fd3973ad7edde4eca71b4f8808dd4857a2a3a3e8ae5642a5cb196e846040516128ac9190615061565b6000612b8e68056bc75e2d63100000610eb3601554856126f590919063ffffffff16565b9050612b9b8484836134e5565b612bb58385612bb0858563ffffffff6126b316565b612849565b6001600160a01b038085169084167f220e66e3e759e1382aa86cd8af5abca05ebf3ad564f223ae62d977678337272a612bf4858563ffffffff6126b316565b60405161283a9190615061565b6001600160a01b038116612c275760405162461bcd60e51b81526004016103dd90614e92565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b602154600090819084861180612c97575083155b15612ca157612dac565b808611612cb5575086915085905084612dac565b6000612ccf86674563918244f4000063ffffffff61219516565b9050612cf268056bc75e2d63100000610eb38b610ea7858463ffffffff61219516565b9350612d20612d13670de0b6b3a7640000610eb38b8963ffffffff6126f516565b859063ffffffff6126b316565b9350612d4e612d35828463ffffffff6126b316565b610eb38668056bc75e2d6310000063ffffffff6126f516565b935088841115612d5c578893505b612d85612d788368056bc75e2d6310000063ffffffff61219516565b859063ffffffff6126f516565b9250612d9c6064610eb3858863ffffffff61272f16565b925087831115612daa578792505b505b955095509592505050565b602f546002546001600160a01b038581166000908152603c602090815260408083208885168452909152812054909392919091169015612e1a576001600160a01b038087166000908152603c602090815260408083209389168352929052205491505b6037546000906060906001600160a01b038085169163d138f9a160e01b918b9116612e5868056bc75e2d63100000610eb38c8b63ffffffff6126f516565b604051602401612e6a93929190614c09565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612ea89190614b23565b600060405180830381855afa9150503d8060008114612ee3576040519150601f19603f3d011682016040523d82523d6000602084013e612ee8565b606091505b50915091506001821415612efe57602081015194505b84156130f65760375460385460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612f3a929116908990600401614c9b565b602060405180830381600087803b158015612f5457600080fd5b505af1158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f8c9190810190614087565b50603854603f546040516000926001600160a01b031691612fb3918e918a91602401614cb6565b60408051601f198184030181529181526020820180516001600160e01b0316630efe6a8b60e01b17905251612fe89190614b23565b6000604051808303816000865af19150503d8060008114613025576040519150601f19603f3d011682016040523d82523d6000602084013e61302a565b606091505b5050905080156130a157601f54613047908763ffffffff61219516565b601f55603754603f546040518c926001600160a01b0390811692908f16917ff41c644671512f1cda76abfe6038e3d7d526c1377a5a8c692f81703901db215091613094918b918d91614e35565b60405180910390a46130f4565b603754603f546040518c926001600160a01b0390811692908f16917f483f67ea49f76ac15e15bbad68b52788ca47d50aef1e4acfe95e5e307e710812916130eb918b918d91614e35565b60405180910390a45b505b50505050505050505050565b600081848411156131265760405162461bcd60e51b81526004016103dd9190614e51565b505050900390565b6000818361314f5760405162461bcd60e51b81526004016103dd9190614e51565b50600083858161315b57fe5b0495945050505050565b804710156131855760405162461bcd60e51b81526004016103dd90614f22565b6000826001600160a01b03168260405161319e90614b2f565b60006040518083038185875af1925050503d80600081146131db576040519150601f19603f3d011682016040523d82523d6000602084013e6131e0565b606091505b50509050806128b55760405162461bcd60e51b81526004016103dd90614f12565b6040516128b590849063a9059cbb60e01b906132239086908690602401614c9b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613566565b6000613266838361364b565b61329a5750600180830180548083018083556000928352602080842090920185905584835290859052604090912055611368565b506000611368565b60006132ae838361364b565b1561329a57600082815260208490526040902054600184015460001991820191018082146133265760008560010182815481106132e757fe5b906000526020600020015490508086600101848154811061330457fe5b6000918252602080832090910192909255918252869052604090206001830190555b6000848152602086905260408120556001850180548061334257fe5b60019003818190600052602060002001600090559055600192505050611368565b6040805160a0810182526001600160a01b03808b16825289811660208084019190915230838501819052606080850191909152918a166080840152835191820184528882528101879052918201859052600091829182916133c891908e888886613660565b90935091506133d78b83613885565b600254602754604051631e2c62d360e01b81526001600160a01b0390921691631e2c62d391613410918f918f9188918a91600401614c59565b60206040518083038186803b15801561342857600080fd5b505afa15801561343c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061346091908101906141ea565b9050896001600160a01b03168b6001600160a01b03168d7fb4eb3c9b62efcce7021cba5fd9cd0c44df91c2272806ccc5e57df7c912e8d7168c86886040516134aa93929190614cb6565b60405180910390a499509950999650505050505050565b6040516126529085906323b872dd60e01b9061322390879087908790602401614c09565b80156128b5576001600160a01b038216600090815260166020526040902054613514908263ffffffff61219516565b6001600160a01b0380841660008181526016602052604090819020939093559151908516907f40a75ae5f7a5336e75f7c7977e12c4b46a9ac0f30de01a2d5b6c1a4f4af63587906128ac908590615061565b613578826001600160a01b0316613953565b6135945760405162461bcd60e51b81526004016103dd90615042565b60006060836001600160a01b0316836040516135b09190614b23565b6000604051808303816000865af19150503d80600081146135ed576040519150601f19603f3d011682016040523d82523d6000602084013e6135f2565b606091505b5091509150816136145760405162461bcd60e51b81526004016103dd90614ef2565b805115612652578080602001905161362f9190810190614087565b6126525760405162461bcd60e51b81526004016103dd90614ff2565b60009081526020919091526040902054151590565b845160009081901515806136775750602087015115155b6136935760405162461bcd60e51b81526004016103dd90614fb2565b60208701516136a457865160208801525b6020870151875111156136c95760405162461bcd60e51b81526004016103dd90614f32565b6000806000876137865760408a01516137455785156136fa576136f38a60005b602002015161398f565b905061370e565b61370b8a60005b60200201516139bf565b90505b80156137405760808b01518b5161373191908b908e60015b6020020151856139e3565b895161373d90826126b3565b8a525b613786565b851561375d576137568a60026136e9565b905061376b565b6137688a6002613701565b90505b80156137865760408a01516137809082612195565b60408b01525b8651156137a55760405162461bcd60e51b81526004016103dd90614fe2565b6137af8b8b613b33565b60408c015191945092506137fb57895182146137dd5760405162461bcd60e51b81526004016103dd90615022565b80156137f6576137f3828263ffffffff61219516565b91505b613875565b60208a015182111561381f5760405162461bcd60e51b81526004016103dd90614f02565b60408a01518310156138435760405162461bcd60e51b81526004016103dd90614e82565b80156138755760808b015160208c015161386291908b908e6000613726565b613872838263ffffffff6126b316565b92505b5090999098509650505050505050565b60295480156128b557602d546000906001600160a01b03858116911614156138ae575081613933565b600254604051635967aa7560e11b81526001600160a01b039091169063b2cf54ea906138e09087908790600401614c9b565b60206040518083038186803b1580156138f857600080fd5b505afa15801561390c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061393091908101906141ea565b90505b818111156126525760405162461bcd60e51b81526004016103dd90614f52565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061398757508115155b949350505050565b600061136868056bc75e2d631000006139b3603e54856126f590919063ffffffff16565b9063ffffffff613c4516565b600061136868056bc75e2d631000006139b3601854856126f590919063ffffffff16565b808015613b2b576001600160a01b038681166000908152603360205260409020541615613a99576001600160a01b03808716600090815260336020526040902054613a319116878684613c87565b5050613a96613a5868056bc75e2d63100000610eb3603954856126f590919063ffffffff16565b613a8a613a7d68056bc75e2d63100000610eb3602054876126f590919063ffffffff16565b849063ffffffff6126b316565b9063ffffffff6126b316565b90505b6001600160a01b038416600090815260196020526040902054613ac2908263ffffffff61219516565b6001600160a01b03808616600081815260196020526040908190209390935591518792918916907fb23479169712c443e6b00fb0cec3506a5f5926f541df4243d313e11c8c5c71ed90613b16908690615061565b60405180910390a4613b2b8686868686612db7565b505050505050565b815160208084015160408086015160608781015187519588015188850151945160009889989497630957ba1160e21b97613b7a979296919592949293919291602401614b63565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260035491519092506000916001600160a01b031690613bcc908490614b23565b600060405180830381855af49150503d8060008114613c07576040519150601f19603f3d011682016040523d82523d6000602084013e613c0c565b606091505b509250905080613c2e5760405162461bcd60e51b81526004016103dd90615012565b602082015193506040820151925050509250929050565b60006112b083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d20565b6031546040516306a688ff60e11b815260009182916001600160a01b0390911690630d4d11fe90613cc2908990899089908990600401614bcb565b6040805180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613d139190810190614208565b9097909650945050505050565b60008183613d415760405162461bcd60e51b81526004016103dd9190614e51565b5083613d4f575060006112b0565b6000836001860381613d5d57fe5b0460010195945050505050565b604051806101e001604052806000801916815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915290565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b60405180606001604052806000815260200160008152602001600081525090565b803561136881615169565b80356113688161517d565b80516113688161517d565b803561136881615186565b80356113688161518f565b60008083601f840112613f3657600080fd5b50813567ffffffffffffffff811115613f4e57600080fd5b602083019150836001820283011115613f6657600080fd5b9250929050565b805161136881615186565b600060208284031215613f8a57600080fd5b60006139878484613eed565b60008060408385031215613fa957600080fd5b6000613fb58585613eed565b9250506020613fc685828601613eed565b9150509250929050565b60008060408385031215613fe357600080fd5b6000613fef8585613eed565b9250506020613fc685828601613f0e565b60008060008060008060c0878903121561401957600080fd5b60006140258989613eed565b965050602061403689828a01613f0e565b955050604061404789828a01613f0e565b945050606061405889828a01613f0e565b935050608061406989828a01613ef8565b92505060a061407a89828a01613ef8565b9150509295509295509295565b60006020828403121561409957600080fd5b60006139878484613f03565b6000602082840312156140b757600080fd5b60006139878484613f0e565b600080604083850312156140d657600080fd5b6000613fb58585613f0e565b6000806000606084860312156140f757600080fd5b60006141038686613f0e565b935050602061411486828701613eed565b925050604061412586828701613f0e565b9150509250925092565b6000806040838503121561414257600080fd5b6000613fef8585613f0e565b60008060008060006080868803121561416657600080fd5b60006141728888613f0e565b955050602061418388828901613f0e565b945050604061419488828901613ef8565b935050606086013567ffffffffffffffff8111156141b157600080fd5b6141bd88828901613f24565b92509250509295509295909350565b6000602082840312156141de57600080fd5b60006139878484613f19565b6000602082840312156141fc57600080fd5b60006139878484613f6d565b6000806040838503121561421b57600080fd5b60006142278585613f6d565b9250506020613fc685828601613f6d565b60008060006060848603121561424d57600080fd5b60006142598686613f0e565b935050602061426a86828701613f0e565b925050604061412586828701613ef8565b600061428783836149f9565b50506101e00190565b614299816150fc565b82525050565b60006142aa826150ea565b6142b481856150ee565b93506142bf836150e4565b8060005b838110156142ed5781516142d7888261427b565b97506142e2836150e4565b9250506001016142c3565b509495945050505050565b61429981615107565b6142998161510c565b6000614315826150ea565b61431f81856150f7565b935061432f818560208601615133565b9290920192915050565b61429981615128565b600061434d826150ea565b61435781856150ee565b9350614367818560208601615133565b6143708161515f565b9093019392505050565b60006143876013836150ee565b7207769746864726177416d6f756e74206973203606c1b815260200192915050565b60006143b66006836150ee565b6514185d5cd95960d21b815260200192915050565b60006143d8601b836150ee565b7f696e73756666696369656e742073776170206c69717569646974790000000000815260200192915050565b60006144116026836150ee565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006144596014836150ee565b73696e646566696e6974652d7465726d206f6e6c7960601b815260200192915050565b60006144896022836150ee565b7f6465706f7369742063616e6e6f7420636f766572206261636b20696e746572658152611cdd60f21b602082015260400192915050565b60006144cd601b836150ee565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006145066010836150ee565b6f1ddc9bdb99c8185cdcd95d081cd95b9d60821b815260200192915050565b6000614532600e836150ee565b6d1b1bd85b881d1bdbc81cda1bdc9d60921b815260200192915050565b600061455c6020836150ee565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b60006145956013836150ee565b72737761702066696c6c20746f6f206c6172676560681b815260200192915050565b60006145c4603a836150ee565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207281527f6563697069656e74206d61792068617665207265766572746564000000000000602082015260400192915050565b6000614623601d836150ee565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000815260200192915050565b600061465c601c836150ee565b7f736f75726365416d6f756e74206c6172676572207468616e206d617800000000815260200192915050565b60006146956018836150ee565b7f776974686472617720616d6f756e7420746f6f20686967680000000000000000815260200192915050565b60006146ce600e836150ee565b6d7377617020746f6f206c6172676560901b815260200192915050565b60006146f86021836150ee565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061473b600c836150ee565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b60006147636012836150ee565b7106465706f736974416d6f756e7420697320360741b815260200192915050565b60006147916012836150ee565b713ab73432b0b63a343c903837b9b4ba34b7b760711b815260200192915050565b60006147bf6014836150ee565b7319985b1b189858dac81b9bdd08185b1b1bddd95960621b815260200192915050565b60006147ef602e836150ee565b7f6d696e206f72206d617820736f7572636520746f6b656e20616d6f756e74206e81526d1959591cc81d1bc81899481cd95d60921b602082015260400192915050565b60006113686000836150f7565b600061484c600e836150ee565b6d1b1bd85b881a5cc818db1bdcd95960921b815260200192915050565b6000614876600c836150ee565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b600061489e600d836150ee565b6c696e76616c696420737461746560981b815260200192915050565b60006148c7602a836150ee565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b60006149136013836150ee565b721b1bd85b881d195c9b481a185cc8195b991959606a1b815260200192915050565b6000614942600b836150ee565b6a1cddd85c0819985a5b195960aa1b815260200192915050565b60006149696016836150ee565b751cddd85c081d1bdbc81b185c99d9481d1bc8199a5b1b60521b815260200192915050565b600061499b6016836150ee565b750cae8d0cae440c8cae0dee6d2e840dad2e6dac2e8c6d60531b815260200192915050565b60006149cd601f836150ee565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b80516101e0830190614a0b8482614301565b506020820151614a1e6020850182614290565b506040820151614a316040850182614290565b506060820151614a446060850182614301565b506080820151614a576080850182614301565b5060a0820151614a6a60a0850182614301565b5060c0820151614a7d60c0850182614301565b5060e0820151614a9060e0850182614301565b50610100820151614aa5610100850182614301565b50610120820151614aba610120850182614301565b50610140820151614acf610140850182614301565b50610160820151614ae4610160850182614301565b50610180820151614af9610180850182614301565b506101a0820151614b0e6101a0850182614301565b506101c08201516126526101c0850182614301565b60006112b0828461430a565b600061136882614832565b602081016113688284614290565b60408101614b568285614290565b6112b06020830184614290565b60e08101614b71828a614290565b614b7e6020830189614290565b614b8b6040830188614290565b614b986060830187614290565b614ba56080830186614301565b614bb260a0830185614301565b614bbf60c0830184614301565b98975050505050505050565b60808101614bd98287614290565b614be66020830186614290565b614bf36040830185614290565b614c006060830184614301565b95945050505050565b60608101614c178286614290565b614c246020830185614290565b6139876040830184614301565b60808101614c3f8287614290565b614c4c6020830186614290565b614bf36040830185614301565b60a08101614c678288614290565b614c746020830187614290565b614c816040830186614301565b614c8e6060830185614301565b610c826080830184614301565b60408101614ca98285614290565b6112b06020830184614301565b60608101614cc48286614290565b614c246020830185614301565b60808101614cdf8287614290565b614c4c6020830186614301565b602080825281016112b0818461429f565b6020810161136882846142f8565b6101008101614d1a828b614301565b614d27602083018a6142f8565b614d346040830189614290565b614d416060830188614290565b614d4e6080830187614290565b614d5b60a0830186614301565b614d6860c0830185614301565b614d7560e0830184614301565b9998505050505050505050565b6101808101614d91828f614301565b614d9e602083018e614301565b614dab604083018d614301565b614db8606083018c6142f8565b614dc5608083018b614301565b614dd260a083018a614301565b614ddf60c0830189614301565b614dec60e0830188614301565b614dfa610100830187614301565b614e08610120830186614301565b614e16610140830185614290565b614e24610160830184614290565b9d9c50505050505050505050505050565b60608101614cc48286614301565b602081016113688284614339565b602080825281016112b08184614342565b602080825281016113688161437a565b60208082528101611368816143a9565b60208082528101611368816143cb565b6020808252810161136881614404565b602080825281016113688161444c565b602080825281016113688161447c565b60208082528101611368816144c0565b60208082528101611368816144f9565b6020808252810161136881614525565b602080825281016113688161454f565b6020808252810161136881614588565b60208082528101611368816145b7565b6020808252810161136881614616565b602080825281016113688161464f565b6020808252810161136881614688565b60208082528101611368816146c1565b60208082528101611368816146eb565b602080825281016113688161472e565b6020808252810161136881614756565b6020808252810161136881614784565b60208082528101611368816147b2565b60208082528101611368816147e2565b602080825281016113688161483f565b6020808252810161136881614869565b6020808252810161136881614891565b60208082528101611368816148ba565b6020808252810161136881614906565b6020808252810161136881614935565b602080825281016113688161495c565b602080825281016113688161498e565b60208082528101611368816149c0565b6101e0810161136882846149f9565b602081016113688284614301565b60a0810161507d8288614301565b614c746020830187614301565b60c081016150988289614301565b6150a56020830188614301565b6150b26040830187614301565b6150bf6060830186614301565b6150cc6080830185614301565b6150d960a0830184614301565b979650505050505050565b60200190565b5190565b90815260200190565b919050565b60006113688261511c565b151590565b90565b6001600160e01b03191690565b6001600160a01b031690565b6000611368826150fc565b60005b8381101561514e578181015183820152602001615136565b838111156126525750506000910152565b601f01601f191690565b615172816150fc565b811461211957600080fd5b61517281615107565b6151728161510c565b6151728161510f56fea365627a7a72315820b3d093ffc265e335120e6e62403e08e98e698da67cd5b65ec32fcf17c887d7796c6578706572696d656e74616cf564736f6c63430005110040",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
