{
  "_format": "hh-sol-artifact-1",
  "contractName": "VaultedgeController",
  "sourceName": "contracts/VaultedgeController.sol",
  "abi": [
    {
      "inputs": [],
      "name": "AbsorptionWeightsNotEqualToOne",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AddressZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CCRMustBeGreaterThanMCR",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CCRTooHigh",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CallerMustBeBorrowerOperations",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CollateralAlreadyActive",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CollateralAlreadyExists",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CollateralDoesNotExist",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CollateralListNotSorted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CollateralNotActive",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ControllerAlreadyInitialized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FeeCurveNotInitialized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "GasCompensationTooHigh",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "GasCompensationZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InterestTimeWindowTooShort",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInputLength",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidNewMax",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSplitOrRatio",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MCRMustBeLessThanCCR",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MCRTooHigh",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MCRTooLow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MaxFeeBelowFloor",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MaxFeeTooHigh",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MaxSystemCollsReached",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MinNetDebtZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MinuteDecayFactorTooHigh",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MinuteDecayFactorZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotOperationalControllerTimelock",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotSafetyOperationsTimelock",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RedemptionFeeFloorTooHigh",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TimelockAddressZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnreasonableBorrowingFeeFloor",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnreasonableInterestRate",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "VaultManagerAlreadySet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "WithdrawDepositCollateralOverlap",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newBoostMinuteDecayFactor",
          "type": "uint256"
        }
      ],
      "name": "BoostMinuteDecayFactorChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newBorrowingFeeFloor",
          "type": "uint256"
        }
      ],
      "name": "BorrowingFeeFloorChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldCCR",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newCCR",
          "type": "uint256"
        }
      ],
      "name": "CCRChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newClaimAddress",
          "type": "address"
        }
      ],
      "name": "ClaimAddressChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "CollateralAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "CollateralDeprecated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "CollateralUndeprecated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newDefaultRouter",
          "type": "address"
        }
      ],
      "name": "DefaultRouterChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newFeeCurve",
          "type": "address"
        }
      ],
      "name": "FeeCurveChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newGlobalBoostMultiplier",
          "type": "uint256"
        }
      ],
      "name": "GlobalBoostMultiplierChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_canMint",
          "type": "bool"
        }
      ],
      "name": "GlobalVEUSDMintOn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newInterestRate",
          "type": "uint256"
        }
      ],
      "name": "InterestRateChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newInterestTimeWindow",
          "type": "uint256"
        }
      ],
      "name": "InterestTimeWindowChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bool",
          "name": "oldValue",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "newValue",
          "type": "bool"
        }
      ],
      "name": "LeverUpEnabledChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldMCR",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newMCR",
          "type": "uint256"
        }
      ],
      "name": "MCRChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldMaxFee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newMaxFee",
          "type": "uint256"
        }
      ],
      "name": "MaxBorrowingFeeChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newMaxCollsInVault",
          "type": "uint256"
        }
      ],
      "name": "MaxCollsInVaultChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newMaxSystemColls",
          "type": "uint256"
        }
      ],
      "name": "MaxSystemCollsChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldMinNetDebt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newMinNetDebt",
          "type": "uint256"
        }
      ],
      "name": "MinNetDebtChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldDecayFactor",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newDecayFactor",
          "type": "uint256"
        }
      ],
      "name": "MinuteDecayFactorChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldOperationsManager",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOperationsManager",
          "type": "address"
        }
      ],
      "name": "OperationsManagerTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newOracle",
          "type": "address"
        }
      ],
      "name": "OracleChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newRecoveryRatio",
          "type": "uint256"
        }
      ],
      "name": "RecoveryRatioChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newSplit",
          "type": "uint256"
        }
      ],
      "name": "RedemptionBorrowerFeeSplitChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldFeeFloor",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newFeeFloor",
          "type": "uint256"
        }
      ],
      "name": "RedemptionFeeFloorChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_enabled",
          "type": "bool"
        }
      ],
      "name": "RedemptionsEnabledUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newSafetyRatio",
          "type": "uint256"
        }
      ],
      "name": "SafetyRatioChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldStabilityPoolManager",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newStabilityPoolManagerT",
          "type": "address"
        }
      ],
      "name": "StabilityPoolManagerTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_contractAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_isWhitelisted",
          "type": "bool"
        }
      ],
      "name": "UpdateVeVaultedgeCallers",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newFeeRecipient",
          "type": "address"
        }
      ],
      "name": "VEUSDFeeRecipientChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldVaultManager",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newVaultManager",
          "type": "address"
        }
      ],
      "name": "VaultManagerAddressChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newTreasury",
          "type": "address"
        }
      ],
      "name": "VaultedgeFinanceTreasuryChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newSplit",
          "type": "uint256"
        }
      ],
      "name": "VaultedgeFinanceTreasurySplitChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldCompensation",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newCompensation",
          "type": "uint256"
        }
      ],
      "name": "VeUSDGasCompensationChanged",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CCR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MCR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VEUSDFeeRecipient",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "absorptionColls",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "absorptionWeights",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_safetyRatio",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_recoveryRatio",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_oracle",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_decimals",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_feeCurve",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_isEdgeStrategy",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "_routerAddress",
          "type": "address"
        }
      ],
      "name": "addCollateral",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "borrowingFeeFloor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newBoostMinuteDecayFactor",
          "type": "uint256"
        }
      ],
      "name": "changeBoostMinuteDecayFactor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newClaimAddress",
          "type": "address"
        }
      ],
      "name": "changeClaimAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_feeCurve",
          "type": "address"
        }
      ],
      "name": "changeFeeCurve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newGlobalBoostMultiplier",
          "type": "uint256"
        }
      ],
      "name": "changeGlobalBoostMultiplier",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newInterestTimeWindow",
          "type": "uint256"
        }
      ],
      "name": "changeInterestTimeWindow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_oracle",
          "type": "address"
        }
      ],
      "name": "changeOracle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_newSafetyRatio",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_newRecoveryRatio",
          "type": "uint256"
        }
      ],
      "name": "changeRatios",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newSplit",
          "type": "uint256"
        }
      ],
      "name": "changeRedemptionBorrowerFeeSplit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newFeeRecipient",
          "type": "address"
        }
      ],
      "name": "changeVEUSDFeeRecipient",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newTreasury",
          "type": "address"
        }
      ],
      "name": "changeVaultedgeFinanceTreasury",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newSplit",
          "type": "uint256"
        }
      ],
      "name": "changeVaultedgeFinanceTreasurySplit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_depositColls",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "_withdrawColls",
          "type": "address[]"
        }
      ],
      "name": "checkCollateralListDouble",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_colls",
          "type": "address[]"
        },
        {
          "internalType": "bool",
          "name": "_deposit",
          "type": "bool"
        }
      ],
      "name": "checkCollateralListSingle",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "collateralParams",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "safetyRatio",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "recoveryRatio",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "oracle",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeCurve",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "defaultRouter",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "active",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "isEdgeStrategy",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "deprecateAllCollateral",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "deprecateCollateral",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAbsorptionCollParams",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getBorrowingFeeFloor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getClaimAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "getDecimals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "getDefaultRouterAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getEntireSystemColl",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getEntireSystemDebt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "getFeeCurve",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getFeeSplitInformation",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "getIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_colls",
          "type": "address[]"
        }
      ],
      "name": "getIndices",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "indices",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_colls",
          "type": "address[]"
        }
      ],
      "name": "getInterestRates",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "rates",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "getIsActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMaxCollsInVault",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "getOracle",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "getPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "getRecoveryRatio",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getRedemptionBorrowerFeeSplit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "getSafetyRatio",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_tokensIn",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amountsIn",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_leverages",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "_entireSystemCollVC",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_VCin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_VCout",
          "type": "uint256"
        }
      ],
      "name": "getTotalVariableDepositFeeAndUpdate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "VEUSDFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "boostFactor",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVEUSDFeeRecipient",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getValidCollateral",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "getValueRVC",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "getValueUSD",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "getValueVC",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_collaterals",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "getValuesRVC",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "RVCValueTotal",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_collaterals",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "getValuesUSD",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "USDValue",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_collaterals",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "getValuesVC",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "VCValue",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_collaterals",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "getValuesVCAndRVC",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "VCValueTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "RVCValueTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256[]",
          "name": "VCPerCollateral",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_collaterals",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "getValuesVCAndRVCAndWeights",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "VCValueTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "RVCValueTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256[]",
          "name": "VCPerCollateral",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "VCWeightsPerCollateral",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_collaterals",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "getValuesVCIndividual",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralAmount",
          "type": "uint256"
        }
      ],
      "name": "getVariableDepositCollateralFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralVCInput",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_collateralVCSystemBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalVCBalancePre",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalVCBalancePost",
          "type": "uint256"
        }
      ],
      "name": "getVariableDepositFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVaultedgeFinanceTreasury",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVaultedgeFinanceTreasurySplit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "activePool",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "defaultPool",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stabilityPool",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "collSurplusPool",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "borrowerOperations",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "veusdToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "VEUSDFeeRecipient",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "vaultedgeFinanceTreasury",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "sortedVaults",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "vaultManagerRedemptions",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "vaultManager",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "claimAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "operationsManager",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stabilityPoolManager",
              "type": "address"
            }
          ],
          "internalType": "struct IVaultedgeControllerInitializer.ControllerAddresses",
          "name": "_addresses",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "interestRates",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "isEdgeStrategy",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_collaterals",
          "type": "address[]"
        }
      ],
      "name": "isEdgeStrategyMany",
      "outputs": [
        {
          "internalType": "bool[]",
          "name": "isEdgeStrategy",
          "type": "bool[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "leverUpEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxBorrowingFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxCollsInVault",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxSystemColls",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minNetDebt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minuteDecayFactor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "operationsManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "redemptionBorrowerFeeSplit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "redemptionFeeFloor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newBorrowingFeeFloor",
          "type": "uint256"
        }
      ],
      "name": "setBorrowingFeeFloor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_CCR",
          "type": "uint256"
        }
      ],
      "name": "setCCR",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_router",
          "type": "address"
        }
      ],
      "name": "setDefaultRouter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_colls",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_newRates",
          "type": "uint256[]"
        }
      ],
      "name": "setInterestRates",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_enabled",
          "type": "bool"
        }
      ],
      "name": "setLeverUp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_MCR",
          "type": "uint256"
        }
      ],
      "name": "setMCR",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_maxBorrowingFee",
          "type": "uint256"
        }
      ],
      "name": "setMaxBorrowingFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minNetDebt",
          "type": "uint256"
        }
      ],
      "name": "setMinNetDebt",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minuteDecayFactor",
          "type": "uint256"
        }
      ],
      "name": "setMinuteDecayFactor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_redemptionFeeFloor",
          "type": "uint256"
        }
      ],
      "name": "setRedemptionFeeFloor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_vm",
          "type": "address"
        }
      ],
      "name": "setVaultManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_veUSDGasCompensation",
          "type": "uint256"
        }
      ],
      "name": "setVeUSDGasCompensation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stabilityPoolManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_rewarder",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_isRewarder",
          "type": "bool"
        }
      ],
      "name": "toggleVaultManagerRewarder",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOperationsManager",
          "type": "address"
        }
      ],
      "name": "transferoperationsManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newSafetyOperations",
          "type": "address"
        }
      ],
      "name": "transferstabilityPoolManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_collateral",
          "type": "address"
        }
      ],
      "name": "unDeprecateCollateral",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_colls",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_weights",
          "type": "uint256[]"
        }
      ],
      "name": "updateAbsorptionColls",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newMax",
          "type": "uint256"
        }
      ],
      "name": "updateMaxCollsInVault",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newMax",
          "type": "uint256"
        }
      ],
      "name": "updateMaxSystemColls",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_enabled",
          "type": "bool"
        }
      ],
      "name": "updateRedemptionsEnabled",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "validCollateral",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "vaultedgeFinanceTreasury",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "vaultedgeFinanceTreasurySplit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "veUSDGasCompensation",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "veusdToken",
      "outputs": [
        {
          "internalType": "contract IveUSDToken_0_6",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50615f5b80620000216000396000f3fe608060405234801561001057600080fd5b506004361061065b5760003560e01c80637fcc9bcf11610345578063bdd6c8b9116101bd578063dccda03d11610104578063ecd9c12f116100ad578063efda2a3a11610087578063efda2a3a14610e4f578063f2fde38b14610e62578063fc7a0f4014610e75578063fe8d6d6f14610e8857600080fd5b8063ecd9c12f14610e16578063ed5183a714610e29578063efbf17a114610e3c57600080fd5b8063e5054c96116100de578063e5054c9614610ddd578063e551a1f714610df0578063e6538bf214610e0357600080fd5b8063dccda03d14610d97578063de68097714610db7578063e056d5d114610dca57600080fd5b8063cc44cefe11610166578063d93f6b3611610140578063d93f6b3614610d5c578063d98bb5b114610d65578063da57ea9d14610d8e57600080fd5b8063cc44cefe14610d2f578063cf54aaa014610d38578063d20c31cc14610d4b57600080fd5b8063c3b7f9fb11610197578063c3b7f9fb14610cf6578063cacabd2714610d09578063cc147ac814610d1c57600080fd5b8063bdd6c8b914610cb0578063bf21ad9c14610cc3578063c25001d914610cd657600080fd5b806397a4b9f71161028c578063ab0084cf11610235578063b543503e1161020f578063b543503e14610c74578063b664979d14610c87578063b835f03214610c94578063bc006c3814610ca757600080fd5b8063ab0084cf14610c2b578063b0f0b72614610c4e578063b31610db14610c6157600080fd5b8063a10c560611610266578063a10c560614610bf2578063a1ee0e7314610c05578063a58e5a5614610c1857600080fd5b806397a4b9f714610bb75780639d6aea0a14610bca578063a055852314610bdf57600080fd5b80638da5cb5b116102ee5780639160f5f9116102c85780639160f5f914610b8857806392824c2414610b9b578063969c245214610bae57600080fd5b80638da5cb5b14610b535780638ee3434a14610b645780638f871a6c14610b7757600080fd5b806383b57bd91161031f57806383b57bd914610b25578063887105d314610b385780638ceb098514610b4057600080fd5b80637fcc9bcf14610a3b57806380038a0b14610a4e57806380d4ab9b14610a6157600080fd5b80634139ad60116104d85780635f3cada01161041f578063715018a6116103c8578063795d26c3116103a2578063795d26c314610a0e5780637d92c3bb14610a165780637e95d66414610a1f5780637fab0f0214610a2857600080fd5b8063715018a6146109ea57806378847d68146109f2578063794e572414610a0557600080fd5b8063614e64d9116103f9578063614e64d9146109bc578063617ddfff146109cf57806369ff8ea7146109e257600080fd5b80635f3cada01461098e5780635f56764d146109965780636030cc8c146109a957600080fd5b806352704a7a116104815780635bdee1711161045b5780635bdee171146109555780635da9a7071461097d5780635e9e32121461098657600080fd5b806352704a7a1461093157806354c847dd146109395780635733d58f1461094c57600080fd5b8063459dd8bd116104b2578063459dd8bd146108f85780634dc809ce1461090b5780634f9b0cfd1461091e57600080fd5b80634139ad60146108bf57806341976e09146108d2578063438d641a146108e557600080fd5b806325b18cff116105a757806331c7a261116105505780633b1c29061161052a5780633b1c2906146108625780633b667865146108755780633b798fb2146108885780634056d9fc146108b657600080fd5b806331c7a26114610833578063385a128f1461083c5780633a0aca2a1461084f57600080fd5b80632e2465f8116105815780632e2465f8146107fa5780632e2b1a881461080d5780632f2b4e901461082057600080fd5b806325b18cff146107b65780632a6e7603146107c75780632d79b8eb146107da57600080fd5b8063164b7691116106095780631d4c200e116105e35780631d4c200e146107575780631ee2d29e1461076d578063229dfaa71461078057600080fd5b8063164b76911461070e57806317ae1fc51461072157806318500d751461074457600080fd5b80630ffc967b1161063a5780630ffc967b146106ae578063108433b5146106d057806310d3d22e146106fb57600080fd5b806291e64214610660578063078e1d48146106865780630a561bea1461069b575b600080fd5b61067361066e3660046154d6565b610e90565b6040519081526020015b60405180910390f35b6106996106943660046154d6565b610eb1565b005b6106736106a936600461550b565b610f8f565b6106c16106bc366004615685565b611055565b60405161067d93929190615724565b60d1546106e3906001600160a01b031681565b6040516001600160a01b03909116815260200161067d565b6106e3610709366004615743565b611146565b61069961071c3660046157a3565b611173565b61073461072f366004615743565b611385565b604051901515815260200161067d565b60d7546106e3906001600160a01b031681565b61075f6113b9565b60405161067d929190615848565b61069961077b36600461587b565b611476565b61073461078e366004615743565b6001600160a01b0316600090815260e86020526040902060060154600160a81b900460ff1690565b60d7546001600160a01b03166106e3565b6106e36107d53660046154d6565b611a52565b6107ed6107e83660046158ff565b611a7c565b60405161067d919061593c565b6106996108083660046154d6565b611b69565b61067361081b36600461594f565b611c0b565b6066546106e3906001600160a01b031681565b61067360e35481565b61069961084a3660046154d6565b611c20565b6065546106e3906001600160a01b031681565b610673610870366004615685565b611d4c565b6106e3610883366004615743565b611dbb565b60da5460d75460d654604080519384526001600160a01b03928316602085015291169082015260600161067d565b61067360e65481565b6106996108cd3660046154d6565b611de8565b6106736108e0366004615743565b611ed2565b6106996108f33660046154d6565b611f74565b610673610906366004615743565b61201a565b610699610919366004615979565b612044565b61067361092c36600461594f565b6120f0565b60db54610673565b6106996109473660046159ac565b6122b1565b61067360e05481565b610968610963366004615a06565b6125e1565b6040805192835260208301919091520161067d565b61067360da5481565b60e354610673565b60da54610673565b6106996109a4366004615aaa565b612889565b6106996109b73660046154d6565b61290d565b6106996109ca3660046154d6565b6129bb565b6106736109dd366004615685565b612acb565b610699612b32565b610699612bb6565b610699610a00366004615979565b612bca565b61067360df5481565b610673612bdc565b61067360e15481565b61067360e45481565b6106e3610a363660046154d6565b612ce4565b610699610a493660046154d6565b612cf4565b610699610a5c3660046154d6565b612d8f565b610acf610a6f366004615743565b60e8602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593946001600160a01b03938416949293918216929181169060ff600160a01b8204811691600160a81b90041689565b60408051998a5260208a01989098526001600160a01b03968716978901979097526060880194909452918416608087015260a086015290911660c0840152151560e083015215156101008201526101200161067d565b610699610b333660046154d6565b612e79565b610673612f02565b610699610b4e366004615685565b612f8e565b6033546001600160a01b03166106e3565b610699610b72366004615743565b6130d2565b60d3546001600160a01b03166106e3565b610673610b9636600461594f565b613172565b610699610ba9366004615743565b61317e565b61067360e25481565b610673610bc5366004615685565b61321e565b610bd2613278565b60405161067d9190615ae1565b6107ed610bed366004615685565b6132da565b610699610c00366004615af4565b6132e6565b6106e3610c13366004615743565b613399565b610699610c26366004615b11565b6133c6565b610c3e610c39366004615685565b613587565b60405161067d9493929190615b44565b610699610c5c3660046154d6565b613667565b610673610c6f366004615743565b61373a565b610699610c82366004615743565b613764565b60e7546107349060ff1681565b610699610ca23660046154d6565b61383b565b61067360e55481565b610699610cbe366004615743565b613922565b6107ed610cd1366004615b75565b613a10565b610ce9610ce43660046158ff565b613adc565b60405161067d9190615bb7565b610699610d04366004615743565b613bb7565b610673610d1736600461594f565b613c4b565b610699610d2a3660046154d6565b613c57565b61067360d85481565b610673610d46366004615743565b613d40565b60d6546001600160a01b03166106e3565b61067360db5481565b610673610d73366004615743565b6001600160a01b0316600090815260e8602052604090205490565b61067360d95481565b610673610da5366004615743565b60e96020526000908152604090205481565b610699610dc5366004615af4565b613d6a565b610699610dd83660046154d6565b613dc8565b610699610deb366004615bfd565b613e28565b610699610dfe3660046154d6565b613e32565b610699610e11366004615743565b613ebb565b610699610e24366004615c44565b613f69565b610699610e37366004615743565b614486565b60d6546106e3906001600160a01b031681565b610699610e5d366004615979565b614534565b610699610e70366004615743565b6145d8565b610699610e83366004615743565b614665565b60d854610673565b60de8181548110610ea057600080fd5b600091825260209091200154905081565b6065546001600160a01b03163314610edc57604051630bdac79f60e31b815260040160405180910390fd5b60d2546040517f078e1d48000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063078e1d4890602401600060405180830381600087803b158015610f3b57600080fd5b505af1158015610f4f573d6000803e3d6000fd5b505050507ffaec01c62edc4d8d27b7250b686d616ab65920f118cef667363c8537c25ecca181604051610f8491815260200190565b60405180910390a150565b6000610f9a86614705565b6001600160a01b03868116600090815260e8602052604080822060049081015491517f73ddaef400000000000000000000000000000000000000000000000000000000815290810189905260248101889052604481018790526064810186905292169182906373ddaef490608401602060405180830381865afa158015611025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110499190615c57565b98975050505050505050565b60008060606000855190508067ffffffffffffffff8111156110795761107961554d565b6040519080825280602002602001820160405280156110a2578160200160208202803683370190505b50915060005b8181101561113d576000806110ef8984815181106110c8576110c8615c70565b60200260200101518985815181106110e2576110e2615c70565b6020026020010151614791565b90925090506110fe8288615c9c565b96508185848151811061111357611113615c70565b60209081029190910101526111288187615c9c565b955050508061113690615caf565b90506110a8565b50509250925092565b600061115182614705565b506001600160a01b03908116600090815260e860205260409020600201541690565b6065546001600160a01b0316331461119e57604051630bdac79f60e31b815260040160405180910390fd5b828181146111bf57604051637db491eb60e01b815260040160405180910390fd5b60ce60009054906101000a90046001600160a01b03166001600160a01b03166392edfc156040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561120f57600080fd5b505af1158015611223573d6000803e3d6000fd5b5050505060005b8181101561137d5767016345785d8a000084848381811061124d5761124d615c70565b90506020020135111561128c576040517f07e0da9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83838281811061129e5761129e615c70565b9050602002013560e960008888858181106112bb576112bb615c70565b90506020020160208101906112d09190615743565b6001600160a01b031681526020810191909152604001600020557ff4671d3cdaee28c89caa09451d86a43448d62ee6ddc1ef9282b31c3a275b012186868381811061131d5761131d615c70565b90506020020160208101906113329190615743565b85858481811061134457611344615c70565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a161137681615caf565b905061122a565b505050505050565b600061139082614705565b506001600160a01b0316600090815260e86020526040902060060154600160a01b900460ff1690565b60608060dc60de8180548060200260200160405190810160405280929190818152602001828054801561141557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113f7575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561146757602002820191906000526020600020905b815481526020019060010190808311611453575b50505050509050915091509091565b6065546001600160a01b031633146114a157604051630bdac79f60e31b815260040160405180910390fd5b6114aa88614842565b6114b385614842565b6114bc83614842565b6114c581614842565b670f43fc2c04ee000087106114ed5760405163d412778b60e01b815260040160405180910390fd5b8686101561150e5760405163d412778b60e01b815260040160405180910390fd5b60d95460dd541061154b576040517f91b545fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60dd54156115e357876001600160a01b031660dd60008154811061157157611571615c70565b6000918252602090912001546001600160a01b031614806115ac57506001600160a01b038816600090815260e8602052604090206005015415155b156115e3576040517fbf508dc400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60dd80546001808201835560008390527fac507b9f8bf86ad8bb770f71cd2b1992902ae0314d93fc0f2bb011d70e79622690910180546001600160a01b0319166001600160a01b038c81169190911790915560408051610120810182528b8152602081018b905289831691810191909152606081018890529086166080820152915460a083019161167391615cc8565b81526001600160a01b03808416602080840191909152600160408085018290528715156060958601528d8416600090815260e88452819020865181559286015191830191909155848101516002830180549185166001600160a01b0319928316179055938501516003830155608085015160048084018054928616929096169190911790945560a0850151600583015560c08501516006909201805460e0870151610100909701511515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff971515600160a01b027fffffffffffffffffffffff00000000000000000000000000000000000000000090921694861694909417179590951691909117909355609a549251633b03578360e21b815292169163ec0d5e0c916117b7918c91016001600160a01b0391909116815260200190565b600060405180830381600087803b1580156117d157600080fd5b505af11580156117e5573d6000803e3d6000fd5b5050609b54604051633b03578360e21b81526001600160a01b038c81166004830152909116925063ec0d5e0c9150602401600060405180830381600087803b15801561183057600080fd5b505af1158015611844573d6000803e3d6000fd5b505060cf54604051633b03578360e21b81526001600160a01b038c81166004830152909116925063ec0d5e0c9150602401600060405180830381600087803b15801561188f57600080fd5b505af11580156118a3573d6000803e3d6000fd5b505060d054604051633b03578360e21b81526001600160a01b038c81166004830152909116925063ec0d5e0c9150602401600060405180830381600087803b1580156118ee57600080fd5b505af1158015611902573d6000803e3d6000fd5b505060ce546040517f6b87d1760000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301529091169250636b87d1769150602401600060405180830381600087803b15801561196657600080fd5b505af115801561197a573d6000803e3d6000fd5b5050505061198888846148eb565b6040516001600160a01b03891681527f7db05e63d635a68c62fd7fd8f3107ae8ab584a383e102d1bd8a40f4c977e465f9060200160405180910390a1604080516001600160a01b038a168152602081018990527ff6ae66b8b8a2c280dea3d848e11ca05d93d43fd60af2bbfbd95626e9f7555f14910160405180910390a1604080516001600160a01b038a168152602081018890527fd19d8a7e8c72d051b3257649d28e9dfc396f83b51ee2280b712ec3e1e9b028c6910160405180910390a15050505050505050565b60dd8181548110611a6257600080fd5b6000918252602090912001546001600160a01b0316905081565b80516060908067ffffffffffffffff811115611a9a57611a9a61554d565b604051908082528060200260200182016040528015611ac3578160200160208202803683370190505b50915060005b81811015611b6257611af3848281518110611ae657611ae6615c70565b6020026020010151614705565b60e86000858381518110611b0957611b09615c70565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060050154838281518110611b4757611b47615c70565b6020908102919091010152611b5b81615caf565b9050611ac9565b5050919050565b6065546001600160a01b03163314611b9457604051630bdac79f60e31b815260040160405180910390fd5b67016345785d8a0000811115611bd6576040517fc763bc1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e38190556040518181527f08fa3ffc45eb3c221885c017285328a6253eef6b1ec56e004c03f50f26d7a7a490602001610f84565b6000611c178383614b1b565b90505b92915050565b6065546001600160a01b03163314611c4b57604051630bdac79f60e31b815260040160405180910390fd5b670de0b6b3a7640000811015611c8d576040517f31c17feb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b671bc16d674ec80000811115611ccf576040517f5c8d500800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e054811115611d0b576040517f679ec1cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60df5460408051918252602082018390527fefeb589e088ecf2bc2a0b6d364f91a4fee37ee6b9c6f089c71169e86f03dc944910160405180910390a160df55565b8151600090815b81811015611db357611d97858281518110611d7057611d70615c70565b6020026020010151858381518110611d8a57611d8a615c70565b6020026020010151614b8e565b611da19084615c9c565b9250611dac81615caf565b9050611d53565b505092915050565b6000611dc682614705565b506001600160a01b03908116600090815260e860205260409020600601541690565b6065546001600160a01b03163314611e1357604051630bdac79f60e31b815260040160405180910390fd5b60df54811015611e4f576040517fa8ab6e5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6729a2241af62c0000811115611e91576040517fb97a45d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e05460408051918252602082018390527f8fef8cb3d376ea764ea9e41cc4380bb23ed262ed1883cfd0ee00f4b08a288b69910160405180910390a160e055565b6001600160a01b03818116600081815260e860205260408082206002015490517face1798e000000000000000000000000000000000000000000000000000000008152600481019390935290921690819063ace1798e90602401602060405180830381865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190615c57565b9392505050565b6065546001600160a01b03163314611f9f57604051630bdac79f60e31b815260040160405180910390fd5b80600003611fd9576040517f7d91db7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e25460408051918252602082018390527f794abdbe21b3b4556467be6af2b2d5e75ae16613bd128dbd47c3727bd52b4b55910160405180910390a160e255565b600061202582614705565b506001600160a01b0316600090815260e8602052604090206001015490565b6065546001600160a01b0316331461206f57604051630bdac79f60e31b815260040160405180910390fd5b61207882614705565b61208181614842565b6001600160a01b03828116600081815260e8602090815260409182902060020180546001600160a01b031916948616948517905581519283528201929092527f05cd89403c6bdeac21c2ff33de395121a31fa1bc2bf3adf4825f1f86e79969dd91015b60405180910390a15050565b60006120fb83614705565b60006121078484614b1b565b90506000609a60009054906101000a90046001600160a01b03166001600160a01b031663896a00896040518163ffffffff1660e01b8152600401600060405180830381865afa15801561215e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121869190810190615d36565b5050609a546040517f3270a9e00000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015292935060009290911690633270a9e090602401602060405180830381865afa1580156121f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122159190615c57565b6001600160a01b03808816600090815260e86020526040812060040154929350911690816373ddaef486858761224b8382615c9c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865afa158015611025573d6000803e3d6000fd5b8151815160008290036122dd57806000036122cc5750505050565b6122d7836000614bde565b50505050565b806000036122f0576122d7846001614bde565b60008460008151811061230557612305615c70565b6020026020010151905060008460008151811061232457612324615c70565b6020908102919091018101516001600160a01b03808516600090815260e890935260408084206005908101549284168552908420015491935091805b828403612399576040517fa26c9d2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82841015612432578188146124ba578982815181106123ba576123ba615c70565b602002602001015195506123cd86614705565b6123d686614ca6565b6001600160a01b038616600090815260e8602052604090206005015482158015906124015750848111155b1561241e576040516273149f60e41b815260040160405180910390fd5b93508361242a83615caf565b925050612360565b8087146124ba5788818151811061244b5761244b615c70565b6020026020010151945061245e85614705565b6001600160a01b038516600090815260e8602052604090206005015481158015906124895750838111155b156124a6576040516273149f60e41b815260040160405180910390fd5b9250826124b282615caf565b915050612360565b8782101561254c578982815181106124d4576124d4615c70565b602002602001015195506124e786614705565b6124f086614ca6565b6001600160a01b038616600090815260e86020526040902060050154821580159061251b5750848111155b15612538576040516273149f60e41b815260040160405180910390fd5b93508361254483615caf565b9250506124ba565b868110156125d55788818151811061256657612566615c70565b6020026020010151945061257985614705565b6001600160a01b038516600090815260e8602052604090206005015481158015906125a45750838111155b156125c1576040516273149f60e41b815260040160405180910390fd5b9250826125cd82615caf565b91505061254c565b50505050505050505050565b60d45460009081906001600160a01b0316331461262a576040517f1d383a2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361263d5750600090508061287e565b6126786040518060a0016040528060008152602001606081526020016000815260200160006001600160a01b03168152602001600081525090565b836126838688615c9c565b61268d9190615cc8565b60808201528851609a546040517f3824174c00000000000000000000000000000000000000000000000000000000815261272d918c916001600160a01b0390911690633824174c906126e3908490600401615ae1565b600060405180830381865afa158015612700573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127289190810190615d86565b614d02565b602083015260005b8181101561287a578a818151811061274f5761274f615c70565b60209081029190910101516001600160a01b0316606084018190528a5161279091908c908490811061278357612783615c70565b6020026020010151614b1b565b83604001818152505060006127d184606001518560400151866020015185815181106127be576127be615c70565b60200260200101518c8860800151614d99565b9050670de0b6b3a76400008185604001516127ec9190615dbb565b6127f69190615dd2565b8452895160009061282a90670de0b6b3a7640000908d908690811061281d5761281d615c70565b6020026020010151614e61565b905060008982876000015161283f9190615dbb565b6128499190615dd2565b90506128558188615c9c565b86519097506128649089615c9c565b97505050508061287390615caf565b9050612735565b5050505b965096945050505050565b612891614e78565b60ce546040517fabd2eec50000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015283151560248301529091169063abd2eec590604401600060405180830381600087803b1580156128f957600080fd5b505af115801561137d573d6000803e3d6000fd5b6065546001600160a01b0316331461293857604051630bdac79f60e31b815260040160405180910390fd5b67016345785d8a000081111561297a576040517fe3b225b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e45460408051918252602082018390527fbb07ced1b1536afc600a5d97cba6e4b294731026286cddc33b98cb2d18569ab7910160405180910390a160e455565b6065546001600160a01b031633146129e657604051630bdac79f60e31b815260040160405180910390fd5b62015180811015612a23576040517f18867b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ce546040517f614e64d9000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063614e64d990602401600060405180830381600087803b158015612a8257600080fd5b505af1158015612a96573d6000803e3d6000fd5b505050507f6e0198befbb9f7791e5415949a85da8059396cfc36c047c8357ee95ecbd48f6081604051610f8491815260200190565b8151600090815b81811015611db357612b16858281518110612aef57612aef615c70565b6020026020010151858381518110612b0957612b09615c70565b6020026020010151614ed2565b612b209084615c9c565b9250612b2b81615caf565b9050612ad2565b612b3a614e78565b60dd5460005b81811015612bb257600060dd8281548110612b5d57612b5d615c70565b60009182526020808320909101546001600160a01b031680835260e890915260409091206006015490915060ff600160a01b9091041615612ba157612ba181614f2a565b50612bab81615caf565b9050612b40565b5050565b612bbe614e78565b612bc86000614f81565b565b612bd2614e78565b612bb282826148eb565b600080609a60009054906101000a90046001600160a01b03166001600160a01b03166381b7f1bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c569190615c57565b90506000609b60009054906101000a90046001600160a01b03166001600160a01b03166381b7f1bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd19190615c57565b9050612cdd8183615c9c565b9250505090565b60dc8181548110611a6257600080fd5b6066546001600160a01b03163314612d1f57604051630d15e67f60e01b815260040160405180910390fd5b60dd548111612d5a576040517fc79dadbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60d98190556040518181527f6d75233efbf506e701187ae40e8244bce2ddbe43316092e103a8e92e58f4d21d90602001610f84565b6065546001600160a01b03163314612dba57604051630bdac79f60e31b815260040160405180910390fd5b60e354811015612df6576040517f87a16f0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a7640000811115612e38576040517fa3932d2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e65460408051918252602082018390527fe0f237f930fa60a0403637cdf5eac979be54d350414e96435e4017a0b70c092d910160405180910390a160e655565b6065546001600160a01b03163314612ea457604051630bdac79f60e31b815260040160405180910390fd5b670de0b6b3a7640000811115612ecd5760405163d412778b60e01b815260040160405180910390fd5b60db8190556040518181527fe8feaa44171151e1f3314ad56ed932fd7282596bbe2dbe6ee32efb2e4b1d119a90602001610f84565b609a54604080517f651340c400000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163651340c49160048083019260209291908290030181865afa158015612f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f899190615c57565b905090565b6065546001600160a01b03163314612fb957604051630bdac79f60e31b815260040160405180910390fd5b805182518114612fdc57604051637db491eb60e01b815260040160405180910390fd5b80600003612ffd57604051637db491eb60e01b815260040160405180910390fd5b6000805b828110156130625783818151811061301b5761301b615c70565b60200260200101518261302e9190615c9c565b915061305285828151811061304557613045615c70565b6020026020010151614ca6565b61305b81615caf565b9050613001565b50670de0b6b3a764000081146130a4576040517f2551aaa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516130b79060dc906020870190615421565b5082516130cb9060de906020860190615486565b5050505050565b6065546001600160a01b031633146130fd57604051630bdac79f60e31b815260040160405180910390fd5b6001600160a01b03811661312457604051639fabe1c160e01b815260040160405180910390fd5b60d780546001600160a01b0319166001600160a01b0383169081179091556040519081527f8f78bb8073e5e407c3601d3c6a9a07525e63c3928f03c746bdc3675f9b8d299d90602001610f84565b6000611c178383614ed2565b6065546001600160a01b031633146131a957604051630bdac79f60e31b815260040160405180910390fd5b6001600160a01b0381166131d057604051639fabe1c160e01b815260040160405180910390fd5b60d380546001600160a01b0319166001600160a01b0383169081179091556040519081527fa333cf3648c25614b869b75ff5f37353c146f3642e54287d4504b02dbfd6180790602001610f84565b8151600090815b81811015611db35761325c85828151811061324257613242615c70565b602002602001015185838151811061278357612783615c70565b6132669084615c9c565b925061327181615caf565b9050613225565b606060dd8054806020026020016040519081016040528092919081815260200182805480156132d057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116132b2575b5050505050905090565b6060611c178383614d02565b6132ee614e78565b60d5546040517fa10c560600000000000000000000000000000000000000000000000000000000815282151560048201526001600160a01b039091169063a10c560690602401600060405180830381600087803b15801561334e57600080fd5b505af1158015613362573d6000803e3d6000fd5b505050507f1673aff4188bbc8c8a4d4c2dbf9f2e355b7edd9c2b33d8dab76e1003a9aa2b7c81604051610f84911515815260200190565b60006133a482614705565b506001600160a01b03908116600090815260e860205260409020600401541690565b6065546001600160a01b031633146133f157604051630bdac79f60e31b815260040160405180910390fd5b6133fa83614705565b670f43fc2c04ee000082106134225760405163d412778b60e01b815260040160405180910390fd5b671bc16d674ec80000811061344a5760405163d412778b60e01b815260040160405180910390fd5b6001600160a01b038316600090815260e860205260409020600181015490548310156134895760405163d412778b60e01b815260040160405180910390fd5b828210156134aa5760405163d412778b60e01b815260040160405180910390fd5b6001600160a01b038416600090815260e8602052604081208481556001018390556134d3614fd3565b905080156134fc57818310156134fc5760405163d412778b60e01b815260040160405180910390fd5b604080516001600160a01b0387168152602081018690527ff6ae66b8b8a2c280dea3d848e11ca05d93d43fd60af2bbfbd95626e9f7555f14910160405180910390a1604080516001600160a01b0387168152602081018590527fd19d8a7e8c72d051b3257649d28e9dfc396f83b51ee2280b712ec3e1e9b028c6910160405180910390a15050505050565b6000806060806135978686611055565b8851929650909450925067ffffffffffffffff8111156135b9576135b961554d565b6040519080825280602002602001820160405280156135e2578160200160208202803683370190505b509050831561365e5760005b865181101561365c5784670de0b6b3a764000084838151811061361357613613615c70565b60200260200101516136259190615dbb565b61362f9190615dd2565b82828151811061364157613641615c70565b602090810291909101015261365581615caf565b90506135ee565b505b92959194509250565b6065546001600160a01b0316331461369257604051630bdac79f60e31b815260040160405180910390fd5b60d2546040517fb0f0b726000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063b0f0b72690602401600060405180830381600087803b1580156136f157600080fd5b505af1158015613705573d6000803e3d6000fd5b505050507fcf0d973605739edee5c4c0fb6640af41a70303a6ab079f2a1a35c3c0caa61b0381604051610f8491815260200190565b600061374582614705565b506001600160a01b0316600090815260e8602052604090206005015490565b6065546001600160a01b0316331461378f57604051630bdac79f60e31b815260040160405180910390fd5b60ce546001600160a01b0316156137d2576040517fdb9862d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ce54604080516001600160a01b03928316815291831660208301527f4cedbd0e29555db0acfd0eb890f376d0ad0df4a848df1f1f0d4f097d60de5f80910160405180910390a160ce80546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b0316331461386657604051630bdac79f60e31b815260040160405180910390fd5b806000036138a0576040517f30190fb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a764000081106138e1576040517fc1d125fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e55460408051918252602082018390527f752957319e93a7df72505ea14d1fe0c76f2253d8af25185b6c27094f0ffbdf86910160405180910390a160e555565b6065546001600160a01b0316331461394d57604051630bdac79f60e31b815260040160405180910390fd5b61395681614705565b6001600160a01b038116600090815260e86020526040902060060154600160a01b900460ff16156139b3576040517fee4357d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600081815260e86020908152604091829020600601805460ff60a01b1916600160a01b17905590519182527f075d7641153b3cf9af121a3c31a038deb6bcd961e86618d9a224d1a79e960a709101610f84565b6060818067ffffffffffffffff811115613a2c57613a2c61554d565b604051908082528060200260200182016040528015613a55578160200160208202803683370190505b50915060005b81811015611db35760e96000868684818110613a7957613a79615c70565b9050602002016020810190613a8e9190615743565b6001600160a01b03166001600160a01b0316815260200190815260200160002054838281518110613ac157613ac1615c70565b6020908102919091010152613ad581615caf565b9050613a5b565b6060815167ffffffffffffffff811115613af857613af861554d565b604051908082528060200260200182016040528015613b21578160200160208202803683370190505b50905060005b8251811015613bb15760e86000848381518110613b4657613b46615c70565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060060160159054906101000a900460ff16828281518110613b9157613b91615c70565b91151560209283029190910190910152613baa81615caf565b9050613b27565b50919050565b613bbf614e78565b613bc881614705565b6001600160a01b038116600090815260e86020526040902060060154600160a01b900460ff16613c3f5760405162461bcd60e51b815260206004820152601d60248201527f636f6c6c61746572616c20616c7265616479206465707265636174656400000060448201526064015b60405180910390fd5b613c4881614f2a565b50565b6000611c178383614b8e565b6065546001600160a01b03163314613c8257604051630bdac79f60e31b815260040160405180910390fd5b80600003613cbc576040517f21448e8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b680ad78ebc5ac6200000811115613cff576040517f89b3137500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e15460408051918252602082018390527f3db0154f9d98283c985b5be6621724bfab9dab2edc1f1046afca872c63d4cfd6910160405180910390a160e155565b6000613d4b82614705565b506001600160a01b0316600090815260e8602052604090206003015490565b613d72614e78565b60e7546040805160ff9092161515825282151560208301527fc45e6551ca65f623b705de2a94c88ed3942af485520bb01ece686b491be1c11e910160405180910390a160e7805460ff1916911515919091179055565b6065546001600160a01b03163314613df357604051630bdac79f60e31b815260040160405180910390fd5b60d88190556040518181527ff758ff828f25717605d76aacce3875a7754670a611d9eef9075819b6ebb48ded90602001610f84565b612bb28282614bde565b6065546001600160a01b03163314613e5d57604051630bdac79f60e31b815260040160405180910390fd5b670de0b6b3a7640000811115613e865760405163d412778b60e01b815260040160405180910390fd5b60da8190556040518181527f1608aca9799c4cf0681de22112bd1d53fd4df10c8f040971196e55961543b8cb90602001610f84565b6065546001600160a01b03163314613ee657604051630bdac79f60e31b815260040160405180910390fd5b6001600160a01b038116613f0d57604051630a78aeb360e21b815260040160405180910390fd5b6065546040516001600160a01b038084169216907f9942770bc6dad5d9bdcc84efe9f8443b1d4d5d31083b96201df81a1c3c268afc90600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1615808015613f895750600054600160ff909116105b80613fa35750303b158015613fa3575060005460ff166001145b6140155760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401613c36565b6000805460ff191660011790558015614038576000805461ff0019166101001790555b61406461404d6101a084016101808501615743565b61405f6101c085016101a08601615743565b615068565b61408a306140756020850185615743565b6140856040860160208701615743565b615157565b600061409d610100840160e08501615743565b6001600160a01b0316036140c457604051639fabe1c160e01b815260040160405180910390fd5b60006140d861018084016101608501615743565b6001600160a01b0316036140ff57604051639fabe1c160e01b815260040160405180910390fd5b61410f6060830160408401615743565b60cf80546001600160a01b0319166001600160a01b039290921691909117905561413f6080830160608401615743565b60d080546001600160a01b0319166001600160a01b039290921691909117905561416f60c0830160a08401615743565b60d180546001600160a01b0319166001600160a01b039290921691909117905561419f60e0830160c08401615743565b60d680546001600160a01b0319166001600160a01b03929092169190911790556141cf60a0830160808401615743565b60d480546001600160a01b0319166001600160a01b0392909216919091179055614200610100830160e08401615743565b60d780546001600160a01b0319166001600160a01b039290921691909117905561423261012083016101008401615743565b60d280546001600160a01b0319166001600160a01b039290921691909117905561426461014083016101208401615743565b60d580546001600160a01b0319166001600160a01b039290921691909117905561429661016083016101408401615743565b60ce80546001600160a01b0319166001600160a01b03929092169190911790556142c861018083016101608401615743565b60d380546001600160a01b0319166001600160a01b0392909216919091179055600a60d855603260d955670de0b6b3a764000060da8190556702c68af0bb14000060db55670f43fc2c04ee000060df556714d1120d7b16000060e0556801158e460913d0000060e155686194049f30f720000060e25560649061434c906005615dbb565b6143569190615dd2565b60e65561436d6103e8670de0b6b3a7640000615dd2565b614378906005615dbb565b60e35561438f6103e8670de0b6b3a7640000615dd2565b61439a906005615dbb565b60e455670de0976e8a60170060e5557fa333cf3648c25614b869b75ff5f37353c146f3642e54287d4504b02dbfd618076143dc61018084016101608501615743565b6040516001600160a01b03909116815260200160405180910390a17f8f78bb8073e5e407c3601d3c6a9a07525e63c3928f03c746bdc3675f9b8d299d614429610100840160e08501615743565b6040516001600160a01b03909116815260200160405180910390a18015612bb2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016120e4565b6066546001600160a01b031633146144b157604051630d15e67f60e01b815260040160405180910390fd5b6001600160a01b0381166144d857604051630a78aeb360e21b815260040160405180910390fd5b6066546040516001600160a01b038084169216907fbe09490cd0cf3665832fce2ed4356ae0fecea401c2334c5051ae3ab09b768cf790600090a3606680546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b0316331461455f57604051630bdac79f60e31b815260040160405180910390fd5b61456882614705565b61457181614842565b6001600160a01b03828116600081815260e8602090815260409182902060060180546001600160a01b031916948616948517905581519283528201929092527fcf98fac394e29dfa548be1508c2e5b7f69e854047c2da29482539f65f574e76391016120e4565b6145e0614e78565b6001600160a01b03811661465c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401613c36565b613c4881614f81565b6065546001600160a01b0316331461469057604051630bdac79f60e31b815260040160405180910390fd5b6001600160a01b0381166146b757604051639fabe1c160e01b815260040160405180910390fd5b60d680546001600160a01b0319166001600160a01b0383169081179091556040519081527f3fdf9ca9561a11e8105c7f60dd24d99c995cd06187130e9f41e99715870fbaf890602001610f84565b806001600160a01b031660dd60008154811061472357614723615c70565b6000918252602090912001546001600160a01b031614613c48576001600160a01b038116600090815260e860205260408120600501549003613c48576040517f0d8b6eb700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061479f85611ed2565b6001600160a01b038616600090815260e86020526040902060038101548154600190920154929350916147d3836012615c9c565b6147de90600a615ed8565b826147e98987615dbb565b6147f39190615dbb565b6147fd9190615dd2565b955061480a836012615c9c565b61481590600a615ed8565b816148208987615dbb565b61482a9190615dbb565b6148349190615dd2565b9450505050505b9250929050565b6001600160a01b0381166148985760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e742063616e6e6f74206265207a65726f206164647265737300006044820152606401613c36565b803b6000819003612bb25760405162461bcd60e51b815260206004820181905260248201527f4163636f756e7420636f64652073697a652063616e6e6f74206265207a65726f6044820152606401613c36565b6148f482614705565b6148fd81614842565b806001600160a01b031663158ef93e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561493b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061495f9190615ee4565b614995576040517fa0e5e2ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03808316600090815260e8602052604080822060049081015482517ff2cfd55100000000000000000000000000000000000000000000000000000000815283519495869592169363f2cfd551938281019391928290030181865afa158015614a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a2c9190615f01565b6040517f2c3609a0000000000000000000000000000000000000000000000000000000008152600481018390526024810182905291935091506001600160a01b03841690632c3609a090604401600060405180830381600087803b158015614a9357600080fd5b505af1158015614aa7573d6000803e3d6000fd5b505050506001600160a01b03848116600081815260e8602090815260409182902060040180546001600160a01b031916948816948517905581519283528201929092527f48a911f5f23e4b7b5e22cbfb90288da2812d0542322807fda026db26debdba5a910160405180910390a150505050565b6001600160a01b038216600090815260e86020526040812060030154614b42906012615c9c565b614b4d90600a615ed8565b6001600160a01b038416600090815260e8602052604090205483614b7086611ed2565b614b7a9190615dbb565b614b849190615dbb565b611c179190615dd2565b6001600160a01b038216600090815260e8602052604081206003015481614bb485611ed2565b9050614bc182600a615ed8565b614bcb8583615dbb565b614bd59190615dd2565b95945050505050565b81516000819003614bee57505050565b6000805b828110156130cb576000858281518110614c0e57614c0e615c70565b60200260200101519050614c2181614705565b8115801590614c4b57506001600160a01b038116600090815260e860205260409020600501548310155b15614c68576040516273149f60e41b815260040160405180910390fd5b6001600160a01b038116600090815260e8602052604090206005015492508415614c9557614c9581614ca6565b50614c9f81615caf565b9050614bf2565b6001600160a01b038116600090815260e86020526040902060060154600160a01b900460ff16613c48576040517fb4da1e3700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516060908067ffffffffffffffff811115614d2057614d2061554d565b604051908082528060200260200182016040528015614d49578160200160208202803683370190505b50915060005b81811015611db357614d6c85828151811061324257613242615c70565b838281518110614d7e57614d7e615c70565b6020908102919091010152614d9281615caf565b9050614d4f565b6000614da486614705565b6001600160a01b03868116600090815260e860205260409081902060049081015491517fe98f6176000000000000000000000000000000000000000000000000000000008152908101889052602481018790526044810186905260648101859052911690819063e98f6176906084016020604051808303816000875af1158015614e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e569190615c57565b979650505050505050565b600081831015614e715781611c17565b5090919050565b6033546001600160a01b03163314612bc85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401613c36565b6001600160a01b038216600090815260e86020526040812060030154614ef9906012615c9c565b614f0490600a615ed8565b6001600160a01b038416600090815260e8602052604090206001015483614b7086611ed2565b6001600160a01b038116600081815260e86020908152604091829020600601805460ff60a01b1916905590519182527f97cc48cf2f097cb5786b83cfac928f0b821dea349f79ae098db30ab260b834589101610f84565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b609954604080517f5733d58f00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635733d58f9160048083019260209291908290030181865afa158015615036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061505a9190615c57565b6150626151dd565b10905090565b600054610100900460ff166150d35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401613c36565b6150db615275565b6001600160a01b03821661510257604051630a78aeb360e21b815260040160405180910390fd5b6001600160a01b03811661512957604051630a78aeb360e21b815260040160405180910390fd5b606580546001600160a01b039384166001600160a01b03199182161790915560668054929093169116179055565b615160836152e8565b6001600160a01b03821661518757604051639fabe1c160e01b815260040160405180910390fd5b6001600160a01b0381166151ae57604051639fabe1c160e01b815260040160405180910390fd5b609a80546001600160a01b039384166001600160a01b031991821617909155609b805492909316911617905550565b600080609a60009054906101000a90046001600160a01b03166001600160a01b031663896a00896040518163ffffffff1660e01b8152600401600060405180830381865afa158015615233573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261525b9190810190615d36565b509150506000615269612bdc565b9050612cdd8282615374565b600054610100900460ff166152e05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401613c36565b612bc86153ad565b6099546001600160a01b03161561532b576040517f7f820f0e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811661535257604051639fabe1c160e01b815260040160405180910390fd5b609980546001600160a01b0319166001600160a01b0392909216919091179055565b600081156153a45760008261539185670de0b6b3a7640000615dbb565b61539b9190615dd2565b9150611c1a9050565b50600019611c1a565b600054610100900460ff166154185760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401613c36565b612bc833614f81565b828054828255906000526020600020908101928215615476579160200282015b8281111561547657825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190615441565b506154829291506154c1565b5090565b828054828255906000526020600020908101928215615476579160200282015b828111156154765782518255916020019190600101906154a6565b5b8082111561548257600081556001016154c2565b6000602082840312156154e857600080fd5b5035919050565b80356001600160a01b038116811461550657600080fd5b919050565b600080600080600060a0868803121561552357600080fd5b61552c866154ef565b97602087013597506040870135966060810135965060800135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561558c5761558c61554d565b604052919050565b600067ffffffffffffffff8211156155ae576155ae61554d565b5060051b60200190565b600082601f8301126155c957600080fd5b813560206155de6155d983615594565b615563565b82815260059290921b840181019181810190868411156155fd57600080fd5b8286015b8481101561561f57615612816154ef565b8352918301918301615601565b509695505050505050565b600082601f83011261563b57600080fd5b8135602061564b6155d983615594565b82815260059290921b8401810191818101908684111561566a57600080fd5b8286015b8481101561561f578035835291830191830161566e565b6000806040838503121561569857600080fd5b823567ffffffffffffffff808211156156b057600080fd5b6156bc868387016155b8565b935060208501359150808211156156d257600080fd5b506156df8582860161562a565b9150509250929050565b600081518084526020808501945080840160005b83811015615719578151875295820195908201906001016156fd565b509495945050505050565b838152826020820152606060408201526000614bd560608301846156e9565b60006020828403121561575557600080fd5b611c17826154ef565b60008083601f84011261577057600080fd5b50813567ffffffffffffffff81111561578857600080fd5b6020830191508360208260051b850101111561483b57600080fd5b600080600080604085870312156157b957600080fd5b843567ffffffffffffffff808211156157d157600080fd5b6157dd8883890161575e565b909650945060208701359150808211156157f657600080fd5b506158038782880161575e565b95989497509550505050565b600081518084526020808501945080840160005b838110156157195781516001600160a01b031687529582019590820190600101615823565b60408152600061585b604083018561580f565b8281036020840152614bd581856156e9565b8015158114613c4857600080fd5b600080600080600080600080610100898b03121561589857600080fd5b6158a1896154ef565b975060208901359650604089013595506158bd60608a016154ef565b9450608089013593506158d260a08a016154ef565b925060c08901356158e28161586d565b91506158f060e08a016154ef565b90509295985092959890939650565b60006020828403121561591157600080fd5b813567ffffffffffffffff81111561592857600080fd5b615934848285016155b8565b949350505050565b602081526000611c1760208301846156e9565b6000806040838503121561596257600080fd5b61596b836154ef565b946020939093013593505050565b6000806040838503121561598c57600080fd5b615995836154ef565b91506159a3602084016154ef565b90509250929050565b600080604083850312156159bf57600080fd5b823567ffffffffffffffff808211156159d757600080fd5b6159e3868387016155b8565b935060208501359150808211156159f957600080fd5b506156df858286016155b8565b60008060008060008060c08789031215615a1f57600080fd5b863567ffffffffffffffff80821115615a3757600080fd5b615a438a838b016155b8565b97506020890135915080821115615a5957600080fd5b615a658a838b0161562a565b96506040890135915080821115615a7b57600080fd5b50615a8889828a0161562a565b945050606087013592506080870135915060a087013590509295509295509295565b60008060408385031215615abd57600080fd5b615ac6836154ef565b91506020830135615ad68161586d565b809150509250929050565b602081526000611c17602083018461580f565b600060208284031215615b0657600080fd5b8135611f6d8161586d565b600080600060608486031215615b2657600080fd5b615b2f846154ef565b95602085013595506040909401359392505050565b848152836020820152608060408201526000615b6360808301856156e9565b8281036060840152614e5681856156e9565b60008060208385031215615b8857600080fd5b823567ffffffffffffffff811115615b9f57600080fd5b615bab8582860161575e565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015615bf1578351151583529284019291840191600101615bd3565b50909695505050505050565b60008060408385031215615c1057600080fd5b823567ffffffffffffffff811115615c2757600080fd5b615c33858286016155b8565b9250506020830135615ad68161586d565b60006101c08284031215613bb157600080fd5b600060208284031215615c6957600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115611c1a57611c1a615c86565b600060018201615cc157615cc1615c86565b5060010190565b81810381811115611c1a57611c1a615c86565b600082601f830112615cec57600080fd5b81516020615cfc6155d983615594565b82815260059290921b84018101918181019086841115615d1b57600080fd5b8286015b8481101561561f5780518352918301918301615d1f565b600080600060608486031215615d4b57600080fd5b8351925060208401519150604084015167ffffffffffffffff811115615d7057600080fd5b615d7c86828701615cdb565b9150509250925092565b600060208284031215615d9857600080fd5b815167ffffffffffffffff811115615daf57600080fd5b61593484828501615cdb565b8082028115828204841417611c1a57611c1a615c86565b600082615def57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115615e2f578160001904821115615e1557615e15615c86565b80851615615e2257918102915b93841c9390800290615df9565b509250929050565b600082615e4657506001611c1a565b81615e5357506000611c1a565b8160018114615e695760028114615e7357615e8f565b6001915050611c1a565b60ff841115615e8457615e84615c86565b50506001821b611c1a565b5060208310610133831016604e8410600b8410161715615eb2575081810a611c1a565b615ebc8383615df4565b8060001904821115615ed057615ed0615c86565b029392505050565b6000611c178383615e37565b600060208284031215615ef657600080fd5b8151611f6d8161586d565b60008060408385031215615f1457600080fd5b50508051602090910151909290915056fea2646970667358221220bb91d175fa897c53d2ec5257c6ab19253cb52fdd7fad95cbb036f85d07ab7a2a64736f6c63430008130033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061065b5760003560e01c80637fcc9bcf11610345578063bdd6c8b9116101bd578063dccda03d11610104578063ecd9c12f116100ad578063efda2a3a11610087578063efda2a3a14610e4f578063f2fde38b14610e62578063fc7a0f4014610e75578063fe8d6d6f14610e8857600080fd5b8063ecd9c12f14610e16578063ed5183a714610e29578063efbf17a114610e3c57600080fd5b8063e5054c96116100de578063e5054c9614610ddd578063e551a1f714610df0578063e6538bf214610e0357600080fd5b8063dccda03d14610d97578063de68097714610db7578063e056d5d114610dca57600080fd5b8063cc44cefe11610166578063d93f6b3611610140578063d93f6b3614610d5c578063d98bb5b114610d65578063da57ea9d14610d8e57600080fd5b8063cc44cefe14610d2f578063cf54aaa014610d38578063d20c31cc14610d4b57600080fd5b8063c3b7f9fb11610197578063c3b7f9fb14610cf6578063cacabd2714610d09578063cc147ac814610d1c57600080fd5b8063bdd6c8b914610cb0578063bf21ad9c14610cc3578063c25001d914610cd657600080fd5b806397a4b9f71161028c578063ab0084cf11610235578063b543503e1161020f578063b543503e14610c74578063b664979d14610c87578063b835f03214610c94578063bc006c3814610ca757600080fd5b8063ab0084cf14610c2b578063b0f0b72614610c4e578063b31610db14610c6157600080fd5b8063a10c560611610266578063a10c560614610bf2578063a1ee0e7314610c05578063a58e5a5614610c1857600080fd5b806397a4b9f714610bb75780639d6aea0a14610bca578063a055852314610bdf57600080fd5b80638da5cb5b116102ee5780639160f5f9116102c85780639160f5f914610b8857806392824c2414610b9b578063969c245214610bae57600080fd5b80638da5cb5b14610b535780638ee3434a14610b645780638f871a6c14610b7757600080fd5b806383b57bd91161031f57806383b57bd914610b25578063887105d314610b385780638ceb098514610b4057600080fd5b80637fcc9bcf14610a3b57806380038a0b14610a4e57806380d4ab9b14610a6157600080fd5b80634139ad60116104d85780635f3cada01161041f578063715018a6116103c8578063795d26c3116103a2578063795d26c314610a0e5780637d92c3bb14610a165780637e95d66414610a1f5780637fab0f0214610a2857600080fd5b8063715018a6146109ea57806378847d68146109f2578063794e572414610a0557600080fd5b8063614e64d9116103f9578063614e64d9146109bc578063617ddfff146109cf57806369ff8ea7146109e257600080fd5b80635f3cada01461098e5780635f56764d146109965780636030cc8c146109a957600080fd5b806352704a7a116104815780635bdee1711161045b5780635bdee171146109555780635da9a7071461097d5780635e9e32121461098657600080fd5b806352704a7a1461093157806354c847dd146109395780635733d58f1461094c57600080fd5b8063459dd8bd116104b2578063459dd8bd146108f85780634dc809ce1461090b5780634f9b0cfd1461091e57600080fd5b80634139ad60146108bf57806341976e09146108d2578063438d641a146108e557600080fd5b806325b18cff116105a757806331c7a261116105505780633b1c29061161052a5780633b1c2906146108625780633b667865146108755780633b798fb2146108885780634056d9fc146108b657600080fd5b806331c7a26114610833578063385a128f1461083c5780633a0aca2a1461084f57600080fd5b80632e2465f8116105815780632e2465f8146107fa5780632e2b1a881461080d5780632f2b4e901461082057600080fd5b806325b18cff146107b65780632a6e7603146107c75780632d79b8eb146107da57600080fd5b8063164b7691116106095780631d4c200e116105e35780631d4c200e146107575780631ee2d29e1461076d578063229dfaa71461078057600080fd5b8063164b76911461070e57806317ae1fc51461072157806318500d751461074457600080fd5b80630ffc967b1161063a5780630ffc967b146106ae578063108433b5146106d057806310d3d22e146106fb57600080fd5b806291e64214610660578063078e1d48146106865780630a561bea1461069b575b600080fd5b61067361066e3660046154d6565b610e90565b6040519081526020015b60405180910390f35b6106996106943660046154d6565b610eb1565b005b6106736106a936600461550b565b610f8f565b6106c16106bc366004615685565b611055565b60405161067d93929190615724565b60d1546106e3906001600160a01b031681565b6040516001600160a01b03909116815260200161067d565b6106e3610709366004615743565b611146565b61069961071c3660046157a3565b611173565b61073461072f366004615743565b611385565b604051901515815260200161067d565b60d7546106e3906001600160a01b031681565b61075f6113b9565b60405161067d929190615848565b61069961077b36600461587b565b611476565b61073461078e366004615743565b6001600160a01b0316600090815260e86020526040902060060154600160a81b900460ff1690565b60d7546001600160a01b03166106e3565b6106e36107d53660046154d6565b611a52565b6107ed6107e83660046158ff565b611a7c565b60405161067d919061593c565b6106996108083660046154d6565b611b69565b61067361081b36600461594f565b611c0b565b6066546106e3906001600160a01b031681565b61067360e35481565b61069961084a3660046154d6565b611c20565b6065546106e3906001600160a01b031681565b610673610870366004615685565b611d4c565b6106e3610883366004615743565b611dbb565b60da5460d75460d654604080519384526001600160a01b03928316602085015291169082015260600161067d565b61067360e65481565b6106996108cd3660046154d6565b611de8565b6106736108e0366004615743565b611ed2565b6106996108f33660046154d6565b611f74565b610673610906366004615743565b61201a565b610699610919366004615979565b612044565b61067361092c36600461594f565b6120f0565b60db54610673565b6106996109473660046159ac565b6122b1565b61067360e05481565b610968610963366004615a06565b6125e1565b6040805192835260208301919091520161067d565b61067360da5481565b60e354610673565b60da54610673565b6106996109a4366004615aaa565b612889565b6106996109b73660046154d6565b61290d565b6106996109ca3660046154d6565b6129bb565b6106736109dd366004615685565b612acb565b610699612b32565b610699612bb6565b610699610a00366004615979565b612bca565b61067360df5481565b610673612bdc565b61067360e15481565b61067360e45481565b6106e3610a363660046154d6565b612ce4565b610699610a493660046154d6565b612cf4565b610699610a5c3660046154d6565b612d8f565b610acf610a6f366004615743565b60e8602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593946001600160a01b03938416949293918216929181169060ff600160a01b8204811691600160a81b90041689565b60408051998a5260208a01989098526001600160a01b03968716978901979097526060880194909452918416608087015260a086015290911660c0840152151560e083015215156101008201526101200161067d565b610699610b333660046154d6565b612e79565b610673612f02565b610699610b4e366004615685565b612f8e565b6033546001600160a01b03166106e3565b610699610b72366004615743565b6130d2565b60d3546001600160a01b03166106e3565b610673610b9636600461594f565b613172565b610699610ba9366004615743565b61317e565b61067360e25481565b610673610bc5366004615685565b61321e565b610bd2613278565b60405161067d9190615ae1565b6107ed610bed366004615685565b6132da565b610699610c00366004615af4565b6132e6565b6106e3610c13366004615743565b613399565b610699610c26366004615b11565b6133c6565b610c3e610c39366004615685565b613587565b60405161067d9493929190615b44565b610699610c5c3660046154d6565b613667565b610673610c6f366004615743565b61373a565b610699610c82366004615743565b613764565b60e7546107349060ff1681565b610699610ca23660046154d6565b61383b565b61067360e55481565b610699610cbe366004615743565b613922565b6107ed610cd1366004615b75565b613a10565b610ce9610ce43660046158ff565b613adc565b60405161067d9190615bb7565b610699610d04366004615743565b613bb7565b610673610d1736600461594f565b613c4b565b610699610d2a3660046154d6565b613c57565b61067360d85481565b610673610d46366004615743565b613d40565b60d6546001600160a01b03166106e3565b61067360db5481565b610673610d73366004615743565b6001600160a01b0316600090815260e8602052604090205490565b61067360d95481565b610673610da5366004615743565b60e96020526000908152604090205481565b610699610dc5366004615af4565b613d6a565b610699610dd83660046154d6565b613dc8565b610699610deb366004615bfd565b613e28565b610699610dfe3660046154d6565b613e32565b610699610e11366004615743565b613ebb565b610699610e24366004615c44565b613f69565b610699610e37366004615743565b614486565b60d6546106e3906001600160a01b031681565b610699610e5d366004615979565b614534565b610699610e70366004615743565b6145d8565b610699610e83366004615743565b614665565b60d854610673565b60de8181548110610ea057600080fd5b600091825260209091200154905081565b6065546001600160a01b03163314610edc57604051630bdac79f60e31b815260040160405180910390fd5b60d2546040517f078e1d48000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063078e1d4890602401600060405180830381600087803b158015610f3b57600080fd5b505af1158015610f4f573d6000803e3d6000fd5b505050507ffaec01c62edc4d8d27b7250b686d616ab65920f118cef667363c8537c25ecca181604051610f8491815260200190565b60405180910390a150565b6000610f9a86614705565b6001600160a01b03868116600090815260e8602052604080822060049081015491517f73ddaef400000000000000000000000000000000000000000000000000000000815290810189905260248101889052604481018790526064810186905292169182906373ddaef490608401602060405180830381865afa158015611025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110499190615c57565b98975050505050505050565b60008060606000855190508067ffffffffffffffff8111156110795761107961554d565b6040519080825280602002602001820160405280156110a2578160200160208202803683370190505b50915060005b8181101561113d576000806110ef8984815181106110c8576110c8615c70565b60200260200101518985815181106110e2576110e2615c70565b6020026020010151614791565b90925090506110fe8288615c9c565b96508185848151811061111357611113615c70565b60209081029190910101526111288187615c9c565b955050508061113690615caf565b90506110a8565b50509250925092565b600061115182614705565b506001600160a01b03908116600090815260e860205260409020600201541690565b6065546001600160a01b0316331461119e57604051630bdac79f60e31b815260040160405180910390fd5b828181146111bf57604051637db491eb60e01b815260040160405180910390fd5b60ce60009054906101000a90046001600160a01b03166001600160a01b03166392edfc156040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561120f57600080fd5b505af1158015611223573d6000803e3d6000fd5b5050505060005b8181101561137d5767016345785d8a000084848381811061124d5761124d615c70565b90506020020135111561128c576040517f07e0da9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83838281811061129e5761129e615c70565b9050602002013560e960008888858181106112bb576112bb615c70565b90506020020160208101906112d09190615743565b6001600160a01b031681526020810191909152604001600020557ff4671d3cdaee28c89caa09451d86a43448d62ee6ddc1ef9282b31c3a275b012186868381811061131d5761131d615c70565b90506020020160208101906113329190615743565b85858481811061134457611344615c70565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a161137681615caf565b905061122a565b505050505050565b600061139082614705565b506001600160a01b0316600090815260e86020526040902060060154600160a01b900460ff1690565b60608060dc60de8180548060200260200160405190810160405280929190818152602001828054801561141557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113f7575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561146757602002820191906000526020600020905b815481526020019060010190808311611453575b50505050509050915091509091565b6065546001600160a01b031633146114a157604051630bdac79f60e31b815260040160405180910390fd5b6114aa88614842565b6114b385614842565b6114bc83614842565b6114c581614842565b670f43fc2c04ee000087106114ed5760405163d412778b60e01b815260040160405180910390fd5b8686101561150e5760405163d412778b60e01b815260040160405180910390fd5b60d95460dd541061154b576040517f91b545fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60dd54156115e357876001600160a01b031660dd60008154811061157157611571615c70565b6000918252602090912001546001600160a01b031614806115ac57506001600160a01b038816600090815260e8602052604090206005015415155b156115e3576040517fbf508dc400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60dd80546001808201835560008390527fac507b9f8bf86ad8bb770f71cd2b1992902ae0314d93fc0f2bb011d70e79622690910180546001600160a01b0319166001600160a01b038c81169190911790915560408051610120810182528b8152602081018b905289831691810191909152606081018890529086166080820152915460a083019161167391615cc8565b81526001600160a01b03808416602080840191909152600160408085018290528715156060958601528d8416600090815260e88452819020865181559286015191830191909155848101516002830180549185166001600160a01b0319928316179055938501516003830155608085015160048084018054928616929096169190911790945560a0850151600583015560c08501516006909201805460e0870151610100909701511515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff971515600160a01b027fffffffffffffffffffffff00000000000000000000000000000000000000000090921694861694909417179590951691909117909355609a549251633b03578360e21b815292169163ec0d5e0c916117b7918c91016001600160a01b0391909116815260200190565b600060405180830381600087803b1580156117d157600080fd5b505af11580156117e5573d6000803e3d6000fd5b5050609b54604051633b03578360e21b81526001600160a01b038c81166004830152909116925063ec0d5e0c9150602401600060405180830381600087803b15801561183057600080fd5b505af1158015611844573d6000803e3d6000fd5b505060cf54604051633b03578360e21b81526001600160a01b038c81166004830152909116925063ec0d5e0c9150602401600060405180830381600087803b15801561188f57600080fd5b505af11580156118a3573d6000803e3d6000fd5b505060d054604051633b03578360e21b81526001600160a01b038c81166004830152909116925063ec0d5e0c9150602401600060405180830381600087803b1580156118ee57600080fd5b505af1158015611902573d6000803e3d6000fd5b505060ce546040517f6b87d1760000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301529091169250636b87d1769150602401600060405180830381600087803b15801561196657600080fd5b505af115801561197a573d6000803e3d6000fd5b5050505061198888846148eb565b6040516001600160a01b03891681527f7db05e63d635a68c62fd7fd8f3107ae8ab584a383e102d1bd8a40f4c977e465f9060200160405180910390a1604080516001600160a01b038a168152602081018990527ff6ae66b8b8a2c280dea3d848e11ca05d93d43fd60af2bbfbd95626e9f7555f14910160405180910390a1604080516001600160a01b038a168152602081018890527fd19d8a7e8c72d051b3257649d28e9dfc396f83b51ee2280b712ec3e1e9b028c6910160405180910390a15050505050505050565b60dd8181548110611a6257600080fd5b6000918252602090912001546001600160a01b0316905081565b80516060908067ffffffffffffffff811115611a9a57611a9a61554d565b604051908082528060200260200182016040528015611ac3578160200160208202803683370190505b50915060005b81811015611b6257611af3848281518110611ae657611ae6615c70565b6020026020010151614705565b60e86000858381518110611b0957611b09615c70565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060050154838281518110611b4757611b47615c70565b6020908102919091010152611b5b81615caf565b9050611ac9565b5050919050565b6065546001600160a01b03163314611b9457604051630bdac79f60e31b815260040160405180910390fd5b67016345785d8a0000811115611bd6576040517fc763bc1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e38190556040518181527f08fa3ffc45eb3c221885c017285328a6253eef6b1ec56e004c03f50f26d7a7a490602001610f84565b6000611c178383614b1b565b90505b92915050565b6065546001600160a01b03163314611c4b57604051630bdac79f60e31b815260040160405180910390fd5b670de0b6b3a7640000811015611c8d576040517f31c17feb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b671bc16d674ec80000811115611ccf576040517f5c8d500800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e054811115611d0b576040517f679ec1cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60df5460408051918252602082018390527fefeb589e088ecf2bc2a0b6d364f91a4fee37ee6b9c6f089c71169e86f03dc944910160405180910390a160df55565b8151600090815b81811015611db357611d97858281518110611d7057611d70615c70565b6020026020010151858381518110611d8a57611d8a615c70565b6020026020010151614b8e565b611da19084615c9c565b9250611dac81615caf565b9050611d53565b505092915050565b6000611dc682614705565b506001600160a01b03908116600090815260e860205260409020600601541690565b6065546001600160a01b03163314611e1357604051630bdac79f60e31b815260040160405180910390fd5b60df54811015611e4f576040517fa8ab6e5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6729a2241af62c0000811115611e91576040517fb97a45d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e05460408051918252602082018390527f8fef8cb3d376ea764ea9e41cc4380bb23ed262ed1883cfd0ee00f4b08a288b69910160405180910390a160e055565b6001600160a01b03818116600081815260e860205260408082206002015490517face1798e000000000000000000000000000000000000000000000000000000008152600481019390935290921690819063ace1798e90602401602060405180830381865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190615c57565b9392505050565b6065546001600160a01b03163314611f9f57604051630bdac79f60e31b815260040160405180910390fd5b80600003611fd9576040517f7d91db7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e25460408051918252602082018390527f794abdbe21b3b4556467be6af2b2d5e75ae16613bd128dbd47c3727bd52b4b55910160405180910390a160e255565b600061202582614705565b506001600160a01b0316600090815260e8602052604090206001015490565b6065546001600160a01b0316331461206f57604051630bdac79f60e31b815260040160405180910390fd5b61207882614705565b61208181614842565b6001600160a01b03828116600081815260e8602090815260409182902060020180546001600160a01b031916948616948517905581519283528201929092527f05cd89403c6bdeac21c2ff33de395121a31fa1bc2bf3adf4825f1f86e79969dd91015b60405180910390a15050565b60006120fb83614705565b60006121078484614b1b565b90506000609a60009054906101000a90046001600160a01b03166001600160a01b031663896a00896040518163ffffffff1660e01b8152600401600060405180830381865afa15801561215e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121869190810190615d36565b5050609a546040517f3270a9e00000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015292935060009290911690633270a9e090602401602060405180830381865afa1580156121f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122159190615c57565b6001600160a01b03808816600090815260e86020526040812060040154929350911690816373ddaef486858761224b8382615c9c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865afa158015611025573d6000803e3d6000fd5b8151815160008290036122dd57806000036122cc5750505050565b6122d7836000614bde565b50505050565b806000036122f0576122d7846001614bde565b60008460008151811061230557612305615c70565b6020026020010151905060008460008151811061232457612324615c70565b6020908102919091018101516001600160a01b03808516600090815260e890935260408084206005908101549284168552908420015491935091805b828403612399576040517fa26c9d2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82841015612432578188146124ba578982815181106123ba576123ba615c70565b602002602001015195506123cd86614705565b6123d686614ca6565b6001600160a01b038616600090815260e8602052604090206005015482158015906124015750848111155b1561241e576040516273149f60e41b815260040160405180910390fd5b93508361242a83615caf565b925050612360565b8087146124ba5788818151811061244b5761244b615c70565b6020026020010151945061245e85614705565b6001600160a01b038516600090815260e8602052604090206005015481158015906124895750838111155b156124a6576040516273149f60e41b815260040160405180910390fd5b9250826124b282615caf565b915050612360565b8782101561254c578982815181106124d4576124d4615c70565b602002602001015195506124e786614705565b6124f086614ca6565b6001600160a01b038616600090815260e86020526040902060050154821580159061251b5750848111155b15612538576040516273149f60e41b815260040160405180910390fd5b93508361254483615caf565b9250506124ba565b868110156125d55788818151811061256657612566615c70565b6020026020010151945061257985614705565b6001600160a01b038516600090815260e8602052604090206005015481158015906125a45750838111155b156125c1576040516273149f60e41b815260040160405180910390fd5b9250826125cd82615caf565b91505061254c565b50505050505050505050565b60d45460009081906001600160a01b0316331461262a576040517f1d383a2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361263d5750600090508061287e565b6126786040518060a0016040528060008152602001606081526020016000815260200160006001600160a01b03168152602001600081525090565b836126838688615c9c565b61268d9190615cc8565b60808201528851609a546040517f3824174c00000000000000000000000000000000000000000000000000000000815261272d918c916001600160a01b0390911690633824174c906126e3908490600401615ae1565b600060405180830381865afa158015612700573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127289190810190615d86565b614d02565b602083015260005b8181101561287a578a818151811061274f5761274f615c70565b60209081029190910101516001600160a01b0316606084018190528a5161279091908c908490811061278357612783615c70565b6020026020010151614b1b565b83604001818152505060006127d184606001518560400151866020015185815181106127be576127be615c70565b60200260200101518c8860800151614d99565b9050670de0b6b3a76400008185604001516127ec9190615dbb565b6127f69190615dd2565b8452895160009061282a90670de0b6b3a7640000908d908690811061281d5761281d615c70565b6020026020010151614e61565b905060008982876000015161283f9190615dbb565b6128499190615dd2565b90506128558188615c9c565b86519097506128649089615c9c565b97505050508061287390615caf565b9050612735565b5050505b965096945050505050565b612891614e78565b60ce546040517fabd2eec50000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015283151560248301529091169063abd2eec590604401600060405180830381600087803b1580156128f957600080fd5b505af115801561137d573d6000803e3d6000fd5b6065546001600160a01b0316331461293857604051630bdac79f60e31b815260040160405180910390fd5b67016345785d8a000081111561297a576040517fe3b225b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e45460408051918252602082018390527fbb07ced1b1536afc600a5d97cba6e4b294731026286cddc33b98cb2d18569ab7910160405180910390a160e455565b6065546001600160a01b031633146129e657604051630bdac79f60e31b815260040160405180910390fd5b62015180811015612a23576040517f18867b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ce546040517f614e64d9000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063614e64d990602401600060405180830381600087803b158015612a8257600080fd5b505af1158015612a96573d6000803e3d6000fd5b505050507f6e0198befbb9f7791e5415949a85da8059396cfc36c047c8357ee95ecbd48f6081604051610f8491815260200190565b8151600090815b81811015611db357612b16858281518110612aef57612aef615c70565b6020026020010151858381518110612b0957612b09615c70565b6020026020010151614ed2565b612b209084615c9c565b9250612b2b81615caf565b9050612ad2565b612b3a614e78565b60dd5460005b81811015612bb257600060dd8281548110612b5d57612b5d615c70565b60009182526020808320909101546001600160a01b031680835260e890915260409091206006015490915060ff600160a01b9091041615612ba157612ba181614f2a565b50612bab81615caf565b9050612b40565b5050565b612bbe614e78565b612bc86000614f81565b565b612bd2614e78565b612bb282826148eb565b600080609a60009054906101000a90046001600160a01b03166001600160a01b03166381b7f1bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c569190615c57565b90506000609b60009054906101000a90046001600160a01b03166001600160a01b03166381b7f1bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd19190615c57565b9050612cdd8183615c9c565b9250505090565b60dc8181548110611a6257600080fd5b6066546001600160a01b03163314612d1f57604051630d15e67f60e01b815260040160405180910390fd5b60dd548111612d5a576040517fc79dadbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60d98190556040518181527f6d75233efbf506e701187ae40e8244bce2ddbe43316092e103a8e92e58f4d21d90602001610f84565b6065546001600160a01b03163314612dba57604051630bdac79f60e31b815260040160405180910390fd5b60e354811015612df6576040517f87a16f0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a7640000811115612e38576040517fa3932d2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e65460408051918252602082018390527fe0f237f930fa60a0403637cdf5eac979be54d350414e96435e4017a0b70c092d910160405180910390a160e655565b6065546001600160a01b03163314612ea457604051630bdac79f60e31b815260040160405180910390fd5b670de0b6b3a7640000811115612ecd5760405163d412778b60e01b815260040160405180910390fd5b60db8190556040518181527fe8feaa44171151e1f3314ad56ed932fd7282596bbe2dbe6ee32efb2e4b1d119a90602001610f84565b609a54604080517f651340c400000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163651340c49160048083019260209291908290030181865afa158015612f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f899190615c57565b905090565b6065546001600160a01b03163314612fb957604051630bdac79f60e31b815260040160405180910390fd5b805182518114612fdc57604051637db491eb60e01b815260040160405180910390fd5b80600003612ffd57604051637db491eb60e01b815260040160405180910390fd5b6000805b828110156130625783818151811061301b5761301b615c70565b60200260200101518261302e9190615c9c565b915061305285828151811061304557613045615c70565b6020026020010151614ca6565b61305b81615caf565b9050613001565b50670de0b6b3a764000081146130a4576040517f2551aaa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516130b79060dc906020870190615421565b5082516130cb9060de906020860190615486565b5050505050565b6065546001600160a01b031633146130fd57604051630bdac79f60e31b815260040160405180910390fd5b6001600160a01b03811661312457604051639fabe1c160e01b815260040160405180910390fd5b60d780546001600160a01b0319166001600160a01b0383169081179091556040519081527f8f78bb8073e5e407c3601d3c6a9a07525e63c3928f03c746bdc3675f9b8d299d90602001610f84565b6000611c178383614ed2565b6065546001600160a01b031633146131a957604051630bdac79f60e31b815260040160405180910390fd5b6001600160a01b0381166131d057604051639fabe1c160e01b815260040160405180910390fd5b60d380546001600160a01b0319166001600160a01b0383169081179091556040519081527fa333cf3648c25614b869b75ff5f37353c146f3642e54287d4504b02dbfd6180790602001610f84565b8151600090815b81811015611db35761325c85828151811061324257613242615c70565b602002602001015185838151811061278357612783615c70565b6132669084615c9c565b925061327181615caf565b9050613225565b606060dd8054806020026020016040519081016040528092919081815260200182805480156132d057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116132b2575b5050505050905090565b6060611c178383614d02565b6132ee614e78565b60d5546040517fa10c560600000000000000000000000000000000000000000000000000000000815282151560048201526001600160a01b039091169063a10c560690602401600060405180830381600087803b15801561334e57600080fd5b505af1158015613362573d6000803e3d6000fd5b505050507f1673aff4188bbc8c8a4d4c2dbf9f2e355b7edd9c2b33d8dab76e1003a9aa2b7c81604051610f84911515815260200190565b60006133a482614705565b506001600160a01b03908116600090815260e860205260409020600401541690565b6065546001600160a01b031633146133f157604051630bdac79f60e31b815260040160405180910390fd5b6133fa83614705565b670f43fc2c04ee000082106134225760405163d412778b60e01b815260040160405180910390fd5b671bc16d674ec80000811061344a5760405163d412778b60e01b815260040160405180910390fd5b6001600160a01b038316600090815260e860205260409020600181015490548310156134895760405163d412778b60e01b815260040160405180910390fd5b828210156134aa5760405163d412778b60e01b815260040160405180910390fd5b6001600160a01b038416600090815260e8602052604081208481556001018390556134d3614fd3565b905080156134fc57818310156134fc5760405163d412778b60e01b815260040160405180910390fd5b604080516001600160a01b0387168152602081018690527ff6ae66b8b8a2c280dea3d848e11ca05d93d43fd60af2bbfbd95626e9f7555f14910160405180910390a1604080516001600160a01b0387168152602081018590527fd19d8a7e8c72d051b3257649d28e9dfc396f83b51ee2280b712ec3e1e9b028c6910160405180910390a15050505050565b6000806060806135978686611055565b8851929650909450925067ffffffffffffffff8111156135b9576135b961554d565b6040519080825280602002602001820160405280156135e2578160200160208202803683370190505b509050831561365e5760005b865181101561365c5784670de0b6b3a764000084838151811061361357613613615c70565b60200260200101516136259190615dbb565b61362f9190615dd2565b82828151811061364157613641615c70565b602090810291909101015261365581615caf565b90506135ee565b505b92959194509250565b6065546001600160a01b0316331461369257604051630bdac79f60e31b815260040160405180910390fd5b60d2546040517fb0f0b726000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063b0f0b72690602401600060405180830381600087803b1580156136f157600080fd5b505af1158015613705573d6000803e3d6000fd5b505050507fcf0d973605739edee5c4c0fb6640af41a70303a6ab079f2a1a35c3c0caa61b0381604051610f8491815260200190565b600061374582614705565b506001600160a01b0316600090815260e8602052604090206005015490565b6065546001600160a01b0316331461378f57604051630bdac79f60e31b815260040160405180910390fd5b60ce546001600160a01b0316156137d2576040517fdb9862d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ce54604080516001600160a01b03928316815291831660208301527f4cedbd0e29555db0acfd0eb890f376d0ad0df4a848df1f1f0d4f097d60de5f80910160405180910390a160ce80546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b0316331461386657604051630bdac79f60e31b815260040160405180910390fd5b806000036138a0576040517f30190fb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a764000081106138e1576040517fc1d125fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e55460408051918252602082018390527f752957319e93a7df72505ea14d1fe0c76f2253d8af25185b6c27094f0ffbdf86910160405180910390a160e555565b6065546001600160a01b0316331461394d57604051630bdac79f60e31b815260040160405180910390fd5b61395681614705565b6001600160a01b038116600090815260e86020526040902060060154600160a01b900460ff16156139b3576040517fee4357d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600081815260e86020908152604091829020600601805460ff60a01b1916600160a01b17905590519182527f075d7641153b3cf9af121a3c31a038deb6bcd961e86618d9a224d1a79e960a709101610f84565b6060818067ffffffffffffffff811115613a2c57613a2c61554d565b604051908082528060200260200182016040528015613a55578160200160208202803683370190505b50915060005b81811015611db35760e96000868684818110613a7957613a79615c70565b9050602002016020810190613a8e9190615743565b6001600160a01b03166001600160a01b0316815260200190815260200160002054838281518110613ac157613ac1615c70565b6020908102919091010152613ad581615caf565b9050613a5b565b6060815167ffffffffffffffff811115613af857613af861554d565b604051908082528060200260200182016040528015613b21578160200160208202803683370190505b50905060005b8251811015613bb15760e86000848381518110613b4657613b46615c70565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060060160159054906101000a900460ff16828281518110613b9157613b91615c70565b91151560209283029190910190910152613baa81615caf565b9050613b27565b50919050565b613bbf614e78565b613bc881614705565b6001600160a01b038116600090815260e86020526040902060060154600160a01b900460ff16613c3f5760405162461bcd60e51b815260206004820152601d60248201527f636f6c6c61746572616c20616c7265616479206465707265636174656400000060448201526064015b60405180910390fd5b613c4881614f2a565b50565b6000611c178383614b8e565b6065546001600160a01b03163314613c8257604051630bdac79f60e31b815260040160405180910390fd5b80600003613cbc576040517f21448e8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b680ad78ebc5ac6200000811115613cff576040517f89b3137500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e15460408051918252602082018390527f3db0154f9d98283c985b5be6621724bfab9dab2edc1f1046afca872c63d4cfd6910160405180910390a160e155565b6000613d4b82614705565b506001600160a01b0316600090815260e8602052604090206003015490565b613d72614e78565b60e7546040805160ff9092161515825282151560208301527fc45e6551ca65f623b705de2a94c88ed3942af485520bb01ece686b491be1c11e910160405180910390a160e7805460ff1916911515919091179055565b6065546001600160a01b03163314613df357604051630bdac79f60e31b815260040160405180910390fd5b60d88190556040518181527ff758ff828f25717605d76aacce3875a7754670a611d9eef9075819b6ebb48ded90602001610f84565b612bb28282614bde565b6065546001600160a01b03163314613e5d57604051630bdac79f60e31b815260040160405180910390fd5b670de0b6b3a7640000811115613e865760405163d412778b60e01b815260040160405180910390fd5b60da8190556040518181527f1608aca9799c4cf0681de22112bd1d53fd4df10c8f040971196e55961543b8cb90602001610f84565b6065546001600160a01b03163314613ee657604051630bdac79f60e31b815260040160405180910390fd5b6001600160a01b038116613f0d57604051630a78aeb360e21b815260040160405180910390fd5b6065546040516001600160a01b038084169216907f9942770bc6dad5d9bdcc84efe9f8443b1d4d5d31083b96201df81a1c3c268afc90600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1615808015613f895750600054600160ff909116105b80613fa35750303b158015613fa3575060005460ff166001145b6140155760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401613c36565b6000805460ff191660011790558015614038576000805461ff0019166101001790555b61406461404d6101a084016101808501615743565b61405f6101c085016101a08601615743565b615068565b61408a306140756020850185615743565b6140856040860160208701615743565b615157565b600061409d610100840160e08501615743565b6001600160a01b0316036140c457604051639fabe1c160e01b815260040160405180910390fd5b60006140d861018084016101608501615743565b6001600160a01b0316036140ff57604051639fabe1c160e01b815260040160405180910390fd5b61410f6060830160408401615743565b60cf80546001600160a01b0319166001600160a01b039290921691909117905561413f6080830160608401615743565b60d080546001600160a01b0319166001600160a01b039290921691909117905561416f60c0830160a08401615743565b60d180546001600160a01b0319166001600160a01b039290921691909117905561419f60e0830160c08401615743565b60d680546001600160a01b0319166001600160a01b03929092169190911790556141cf60a0830160808401615743565b60d480546001600160a01b0319166001600160a01b0392909216919091179055614200610100830160e08401615743565b60d780546001600160a01b0319166001600160a01b039290921691909117905561423261012083016101008401615743565b60d280546001600160a01b0319166001600160a01b039290921691909117905561426461014083016101208401615743565b60d580546001600160a01b0319166001600160a01b039290921691909117905561429661016083016101408401615743565b60ce80546001600160a01b0319166001600160a01b03929092169190911790556142c861018083016101608401615743565b60d380546001600160a01b0319166001600160a01b0392909216919091179055600a60d855603260d955670de0b6b3a764000060da8190556702c68af0bb14000060db55670f43fc2c04ee000060df556714d1120d7b16000060e0556801158e460913d0000060e155686194049f30f720000060e25560649061434c906005615dbb565b6143569190615dd2565b60e65561436d6103e8670de0b6b3a7640000615dd2565b614378906005615dbb565b60e35561438f6103e8670de0b6b3a7640000615dd2565b61439a906005615dbb565b60e455670de0976e8a60170060e5557fa333cf3648c25614b869b75ff5f37353c146f3642e54287d4504b02dbfd618076143dc61018084016101608501615743565b6040516001600160a01b03909116815260200160405180910390a17f8f78bb8073e5e407c3601d3c6a9a07525e63c3928f03c746bdc3675f9b8d299d614429610100840160e08501615743565b6040516001600160a01b03909116815260200160405180910390a18015612bb2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016120e4565b6066546001600160a01b031633146144b157604051630d15e67f60e01b815260040160405180910390fd5b6001600160a01b0381166144d857604051630a78aeb360e21b815260040160405180910390fd5b6066546040516001600160a01b038084169216907fbe09490cd0cf3665832fce2ed4356ae0fecea401c2334c5051ae3ab09b768cf790600090a3606680546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b0316331461455f57604051630bdac79f60e31b815260040160405180910390fd5b61456882614705565b61457181614842565b6001600160a01b03828116600081815260e8602090815260409182902060060180546001600160a01b031916948616948517905581519283528201929092527fcf98fac394e29dfa548be1508c2e5b7f69e854047c2da29482539f65f574e76391016120e4565b6145e0614e78565b6001600160a01b03811661465c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401613c36565b613c4881614f81565b6065546001600160a01b0316331461469057604051630bdac79f60e31b815260040160405180910390fd5b6001600160a01b0381166146b757604051639fabe1c160e01b815260040160405180910390fd5b60d680546001600160a01b0319166001600160a01b0383169081179091556040519081527f3fdf9ca9561a11e8105c7f60dd24d99c995cd06187130e9f41e99715870fbaf890602001610f84565b806001600160a01b031660dd60008154811061472357614723615c70565b6000918252602090912001546001600160a01b031614613c48576001600160a01b038116600090815260e860205260408120600501549003613c48576040517f0d8b6eb700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061479f85611ed2565b6001600160a01b038616600090815260e86020526040902060038101548154600190920154929350916147d3836012615c9c565b6147de90600a615ed8565b826147e98987615dbb565b6147f39190615dbb565b6147fd9190615dd2565b955061480a836012615c9c565b61481590600a615ed8565b816148208987615dbb565b61482a9190615dbb565b6148349190615dd2565b9450505050505b9250929050565b6001600160a01b0381166148985760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e742063616e6e6f74206265207a65726f206164647265737300006044820152606401613c36565b803b6000819003612bb25760405162461bcd60e51b815260206004820181905260248201527f4163636f756e7420636f64652073697a652063616e6e6f74206265207a65726f6044820152606401613c36565b6148f482614705565b6148fd81614842565b806001600160a01b031663158ef93e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561493b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061495f9190615ee4565b614995576040517fa0e5e2ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03808316600090815260e8602052604080822060049081015482517ff2cfd55100000000000000000000000000000000000000000000000000000000815283519495869592169363f2cfd551938281019391928290030181865afa158015614a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a2c9190615f01565b6040517f2c3609a0000000000000000000000000000000000000000000000000000000008152600481018390526024810182905291935091506001600160a01b03841690632c3609a090604401600060405180830381600087803b158015614a9357600080fd5b505af1158015614aa7573d6000803e3d6000fd5b505050506001600160a01b03848116600081815260e8602090815260409182902060040180546001600160a01b031916948816948517905581519283528201929092527f48a911f5f23e4b7b5e22cbfb90288da2812d0542322807fda026db26debdba5a910160405180910390a150505050565b6001600160a01b038216600090815260e86020526040812060030154614b42906012615c9c565b614b4d90600a615ed8565b6001600160a01b038416600090815260e8602052604090205483614b7086611ed2565b614b7a9190615dbb565b614b849190615dbb565b611c179190615dd2565b6001600160a01b038216600090815260e8602052604081206003015481614bb485611ed2565b9050614bc182600a615ed8565b614bcb8583615dbb565b614bd59190615dd2565b95945050505050565b81516000819003614bee57505050565b6000805b828110156130cb576000858281518110614c0e57614c0e615c70565b60200260200101519050614c2181614705565b8115801590614c4b57506001600160a01b038116600090815260e860205260409020600501548310155b15614c68576040516273149f60e41b815260040160405180910390fd5b6001600160a01b038116600090815260e8602052604090206005015492508415614c9557614c9581614ca6565b50614c9f81615caf565b9050614bf2565b6001600160a01b038116600090815260e86020526040902060060154600160a01b900460ff16613c48576040517fb4da1e3700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516060908067ffffffffffffffff811115614d2057614d2061554d565b604051908082528060200260200182016040528015614d49578160200160208202803683370190505b50915060005b81811015611db357614d6c85828151811061324257613242615c70565b838281518110614d7e57614d7e615c70565b6020908102919091010152614d9281615caf565b9050614d4f565b6000614da486614705565b6001600160a01b03868116600090815260e860205260409081902060049081015491517fe98f6176000000000000000000000000000000000000000000000000000000008152908101889052602481018790526044810186905260648101859052911690819063e98f6176906084016020604051808303816000875af1158015614e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e569190615c57565b979650505050505050565b600081831015614e715781611c17565b5090919050565b6033546001600160a01b03163314612bc85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401613c36565b6001600160a01b038216600090815260e86020526040812060030154614ef9906012615c9c565b614f0490600a615ed8565b6001600160a01b038416600090815260e8602052604090206001015483614b7086611ed2565b6001600160a01b038116600081815260e86020908152604091829020600601805460ff60a01b1916905590519182527f97cc48cf2f097cb5786b83cfac928f0b821dea349f79ae098db30ab260b834589101610f84565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b609954604080517f5733d58f00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635733d58f9160048083019260209291908290030181865afa158015615036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061505a9190615c57565b6150626151dd565b10905090565b600054610100900460ff166150d35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401613c36565b6150db615275565b6001600160a01b03821661510257604051630a78aeb360e21b815260040160405180910390fd5b6001600160a01b03811661512957604051630a78aeb360e21b815260040160405180910390fd5b606580546001600160a01b039384166001600160a01b03199182161790915560668054929093169116179055565b615160836152e8565b6001600160a01b03821661518757604051639fabe1c160e01b815260040160405180910390fd5b6001600160a01b0381166151ae57604051639fabe1c160e01b815260040160405180910390fd5b609a80546001600160a01b039384166001600160a01b031991821617909155609b805492909316911617905550565b600080609a60009054906101000a90046001600160a01b03166001600160a01b031663896a00896040518163ffffffff1660e01b8152600401600060405180830381865afa158015615233573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261525b9190810190615d36565b509150506000615269612bdc565b9050612cdd8282615374565b600054610100900460ff166152e05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401613c36565b612bc86153ad565b6099546001600160a01b03161561532b576040517f7f820f0e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811661535257604051639fabe1c160e01b815260040160405180910390fd5b609980546001600160a01b0319166001600160a01b0392909216919091179055565b600081156153a45760008261539185670de0b6b3a7640000615dbb565b61539b9190615dd2565b9150611c1a9050565b50600019611c1a565b600054610100900460ff166154185760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401613c36565b612bc833614f81565b828054828255906000526020600020908101928215615476579160200282015b8281111561547657825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190615441565b506154829291506154c1565b5090565b828054828255906000526020600020908101928215615476579160200282015b828111156154765782518255916020019190600101906154a6565b5b8082111561548257600081556001016154c2565b6000602082840312156154e857600080fd5b5035919050565b80356001600160a01b038116811461550657600080fd5b919050565b600080600080600060a0868803121561552357600080fd5b61552c866154ef565b97602087013597506040870135966060810135965060800135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561558c5761558c61554d565b604052919050565b600067ffffffffffffffff8211156155ae576155ae61554d565b5060051b60200190565b600082601f8301126155c957600080fd5b813560206155de6155d983615594565b615563565b82815260059290921b840181019181810190868411156155fd57600080fd5b8286015b8481101561561f57615612816154ef565b8352918301918301615601565b509695505050505050565b600082601f83011261563b57600080fd5b8135602061564b6155d983615594565b82815260059290921b8401810191818101908684111561566a57600080fd5b8286015b8481101561561f578035835291830191830161566e565b6000806040838503121561569857600080fd5b823567ffffffffffffffff808211156156b057600080fd5b6156bc868387016155b8565b935060208501359150808211156156d257600080fd5b506156df8582860161562a565b9150509250929050565b600081518084526020808501945080840160005b83811015615719578151875295820195908201906001016156fd565b509495945050505050565b838152826020820152606060408201526000614bd560608301846156e9565b60006020828403121561575557600080fd5b611c17826154ef565b60008083601f84011261577057600080fd5b50813567ffffffffffffffff81111561578857600080fd5b6020830191508360208260051b850101111561483b57600080fd5b600080600080604085870312156157b957600080fd5b843567ffffffffffffffff808211156157d157600080fd5b6157dd8883890161575e565b909650945060208701359150808211156157f657600080fd5b506158038782880161575e565b95989497509550505050565b600081518084526020808501945080840160005b838110156157195781516001600160a01b031687529582019590820190600101615823565b60408152600061585b604083018561580f565b8281036020840152614bd581856156e9565b8015158114613c4857600080fd5b600080600080600080600080610100898b03121561589857600080fd5b6158a1896154ef565b975060208901359650604089013595506158bd60608a016154ef565b9450608089013593506158d260a08a016154ef565b925060c08901356158e28161586d565b91506158f060e08a016154ef565b90509295985092959890939650565b60006020828403121561591157600080fd5b813567ffffffffffffffff81111561592857600080fd5b615934848285016155b8565b949350505050565b602081526000611c1760208301846156e9565b6000806040838503121561596257600080fd5b61596b836154ef565b946020939093013593505050565b6000806040838503121561598c57600080fd5b615995836154ef565b91506159a3602084016154ef565b90509250929050565b600080604083850312156159bf57600080fd5b823567ffffffffffffffff808211156159d757600080fd5b6159e3868387016155b8565b935060208501359150808211156159f957600080fd5b506156df858286016155b8565b60008060008060008060c08789031215615a1f57600080fd5b863567ffffffffffffffff80821115615a3757600080fd5b615a438a838b016155b8565b97506020890135915080821115615a5957600080fd5b615a658a838b0161562a565b96506040890135915080821115615a7b57600080fd5b50615a8889828a0161562a565b945050606087013592506080870135915060a087013590509295509295509295565b60008060408385031215615abd57600080fd5b615ac6836154ef565b91506020830135615ad68161586d565b809150509250929050565b602081526000611c17602083018461580f565b600060208284031215615b0657600080fd5b8135611f6d8161586d565b600080600060608486031215615b2657600080fd5b615b2f846154ef565b95602085013595506040909401359392505050565b848152836020820152608060408201526000615b6360808301856156e9565b8281036060840152614e5681856156e9565b60008060208385031215615b8857600080fd5b823567ffffffffffffffff811115615b9f57600080fd5b615bab8582860161575e565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015615bf1578351151583529284019291840191600101615bd3565b50909695505050505050565b60008060408385031215615c1057600080fd5b823567ffffffffffffffff811115615c2757600080fd5b615c33858286016155b8565b9250506020830135615ad68161586d565b60006101c08284031215613bb157600080fd5b600060208284031215615c6957600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115611c1a57611c1a615c86565b600060018201615cc157615cc1615c86565b5060010190565b81810381811115611c1a57611c1a615c86565b600082601f830112615cec57600080fd5b81516020615cfc6155d983615594565b82815260059290921b84018101918181019086841115615d1b57600080fd5b8286015b8481101561561f5780518352918301918301615d1f565b600080600060608486031215615d4b57600080fd5b8351925060208401519150604084015167ffffffffffffffff811115615d7057600080fd5b615d7c86828701615cdb565b9150509250925092565b600060208284031215615d9857600080fd5b815167ffffffffffffffff811115615daf57600080fd5b61593484828501615cdb565b8082028115828204841417611c1a57611c1a615c86565b600082615def57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115615e2f578160001904821115615e1557615e15615c86565b80851615615e2257918102915b93841c9390800290615df9565b509250929050565b600082615e4657506001611c1a565b81615e5357506000611c1a565b8160018114615e695760028114615e7357615e8f565b6001915050611c1a565b60ff841115615e8457615e84615c86565b50506001821b611c1a565b5060208310610133831016604e8410600b8410161715615eb2575081810a611c1a565b615ebc8383615df4565b8060001904821115615ed057615ed0615c86565b029392505050565b6000611c178383615e37565b600060208284031215615ef657600080fd5b8151611f6d8161586d565b60008060408385031215615f1457600080fd5b50508051602090910151909290915056fea2646970667358221220bb91d175fa897c53d2ec5257c6ab19253cb52fdd7fad95cbb036f85d07ab7a2a64736f6c63430008130033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
