{
  "_format": "hh-sol-artifact-1",
  "contractName": "UniswapV3Swapper",
  "sourceName": "contracts/swap/UniswapV3Swapper.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "who",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "what",
          "type": "bytes4"
        },
        {
          "internalType": "uint256[]",
          "name": "how",
          "type": "uint256[]"
        }
      ],
      "name": "AuthSenderNotAllowed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "BytesOutOfBounds",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "a",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "aInflated",
          "type": "uint256"
        }
      ],
      "name": "FixedPointDivInternal",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "a",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "b",
          "type": "uint256"
        }
      ],
      "name": "FixedPointMulOverflow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FixedPointZeroDivision",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAcceptanceInputLengthMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAcceptanceTokenZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAmountZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskConnectorZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskGasNotInitialized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskGasPriceLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedDate",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedWindow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidFrequency",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        }
      ],
      "name": "TaskInvalidFrequencyMode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidThresholdInput",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidVolumeLimitInput",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskPaused",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "priorityFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskPriorityFeeLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "connectorId",
          "type": "bytes32"
        }
      ],
      "name": "TaskSameBalanceConnectors",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "slippage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "TaskSlippageAboveMax",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskSlippageAboveOne",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "smartVault",
          "type": "address"
        }
      ],
      "name": "TaskSmartVaultPriceOracleNotSet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskThresholdTokenZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "currentTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiration",
          "type": "uint256"
        }
      ],
      "name": "TaskTimeLockActive",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "TaskTokenNotAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTokenOutNotSet",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskTokenThresholdNotMet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTokenZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txCost",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskTxCostLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTxCostLimitPctAboveOne",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txCostPct",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "TaskTxCostLimitPctExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskUnpaused",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "volume",
          "type": "uint256"
        }
      ],
      "name": "TaskVolumeLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskVolumeLimitTokenZero",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "name": "BalanceConnectorsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "connector",
          "type": "address"
        }
      ],
      "name": "ConnectorSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "CustomMaxSlippageSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "CustomTokenOutSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "CustomTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "CustomVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "DefaultMaxSlippageSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "DefaultTokenOutSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "DefaultTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "DefaultVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Executed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "GasLimitsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        }
      ],
      "name": "TimeLockAllowedAtSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TimeLockSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "added",
          "type": "bool"
        }
      ],
      "name": "TokensAcceptanceListSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "acceptanceType",
          "type": "uint8"
        }
      ],
      "name": "TokensAcceptanceTypeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "EXECUTION_TYPE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "authorizer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "slippage",
          "type": "uint256"
        },
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "internalType": "address[]",
          "name": "hopTokens",
          "type": "address[]"
        },
        {
          "internalType": "uint24[]",
          "name": "hopFees",
          "type": "uint24[]"
        }
      ],
      "name": "call",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "connector",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "customMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "customTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "customTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "customVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getBalanceConnectors",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getGasLimits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTaskAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTimeLock",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTokensSource",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "connector",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "maxSlippage",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct BaseSwapTask.CustomTokenOut[]",
                  "name": "customTokensOut",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "maxSlippage",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BaseSwapTask.CustomMaxSlippage[]",
                  "name": "customMaxSlippages",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "address",
                          "name": "smartVault",
                          "type": "address"
                        },
                        {
                          "internalType": "bytes32",
                          "name": "previousBalanceConnectorId",
                          "type": "bytes32"
                        },
                        {
                          "internalType": "bytes32",
                          "name": "nextBalanceConnectorId",
                          "type": "bytes32"
                        }
                      ],
                      "internalType": "struct BaseTask.BaseConfig",
                      "name": "baseConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256",
                          "name": "gasPriceLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "priorityFeeLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "txCostLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "txCostLimitPct",
                          "type": "uint256"
                        }
                      ],
                      "internalType": "struct GasLimitedTask.GasLimitConfig",
                      "name": "gasLimitConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "mode",
                          "type": "uint8"
                        },
                        {
                          "internalType": "uint256",
                          "name": "frequency",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "allowedAt",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "window",
                          "type": "uint256"
                        }
                      ],
                      "internalType": "struct TimeLockedTask.TimeLockConfig",
                      "name": "timeLockConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
                          "name": "acceptanceType",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address[]",
                          "name": "tokens",
                          "type": "address[]"
                        }
                      ],
                      "internalType": "struct TokenIndexedTask.TokenIndexConfig",
                      "name": "tokenIndexConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "internalType": "uint256",
                              "name": "min",
                              "type": "uint256"
                            },
                            {
                              "internalType": "uint256",
                              "name": "max",
                              "type": "uint256"
                            }
                          ],
                          "internalType": "struct TokenThresholdTask.Threshold",
                          "name": "defaultThreshold",
                          "type": "tuple"
                        },
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "components": [
                                {
                                  "internalType": "address",
                                  "name": "token",
                                  "type": "address"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "min",
                                  "type": "uint256"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "max",
                                  "type": "uint256"
                                }
                              ],
                              "internalType": "struct TokenThresholdTask.Threshold",
                              "name": "threshold",
                              "type": "tuple"
                            }
                          ],
                          "internalType": "struct TokenThresholdTask.CustomThresholdConfig[]",
                          "name": "customThresholdConfigs",
                          "type": "tuple[]"
                        }
                      ],
                      "internalType": "struct TokenThresholdTask.TokenThresholdConfig",
                      "name": "tokenThresholdConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "internalType": "uint256",
                              "name": "amount",
                              "type": "uint256"
                            },
                            {
                              "internalType": "uint256",
                              "name": "period",
                              "type": "uint256"
                            }
                          ],
                          "internalType": "struct VolumeLimitedTask.VolumeLimitParams",
                          "name": "defaultVolumeLimit",
                          "type": "tuple"
                        },
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "components": [
                                {
                                  "internalType": "address",
                                  "name": "token",
                                  "type": "address"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "amount",
                                  "type": "uint256"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "period",
                                  "type": "uint256"
                                }
                              ],
                              "internalType": "struct VolumeLimitedTask.VolumeLimitParams",
                              "name": "volumeLimit",
                              "type": "tuple"
                            }
                          ],
                          "internalType": "struct VolumeLimitedTask.CustomVolumeLimitConfig[]",
                          "name": "customVolumeLimitConfigs",
                          "type": "tuple[]"
                        }
                      ],
                      "internalType": "struct VolumeLimitedTask.VolumeLimitConfig",
                      "name": "volumeLimitConfig",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct Task.TaskConfig",
                  "name": "taskConfig",
                  "type": "tuple"
                }
              ],
              "internalType": "struct BaseSwapTask.BaseSwapConfig",
              "name": "baseSwapConfig",
              "type": "tuple"
            }
          ],
          "internalType": "struct UniswapV3Swapper.UniswapV3SwapConfig",
          "name": "config",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "isTokenAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "name": "setBalanceConnectors",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newConnector",
          "type": "address"
        }
      ],
      "name": "setConnector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "setCustomMaxSlippage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "setCustomTokenOut",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "setCustomTokenThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limitAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitPeriod",
          "type": "uint256"
        }
      ],
      "name": "setCustomVolumeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "setDefaultMaxSlippage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "setDefaultTokenOut",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "setDefaultTokenThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limitAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitPeriod",
          "type": "uint256"
        }
      ],
      "name": "setDefaultVolumeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newGasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newPriorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "setGasLimits",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "setTimeLock",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "added",
          "type": "bool[]"
        }
      ],
      "name": "setTokensAcceptanceList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "newTokensAcceptanceType",
          "type": "uint8"
        }
      ],
      "name": "setTokensAcceptanceType",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "smartVault",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokensAcceptanceType",
      "outputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61535b80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80636aacaad811610186578063a5900c4d116100e3578063d09edf3111610097578063d86483e111610071578063d86483e1146107b0578063e6b5be98146107c3578063f9eaee0d146107d657600080fd5b8063d09edf3114610771578063d3feb6021461078a578063d45a76cf1461079d57600080fd5b8063b96e422c116100c8578063b96e422c14610744578063c267621e1461074d578063c47590e41461075e57600080fd5b8063a5900c4d146106cd578063b187bd261461072757600080fd5b806390333ba81161013a578063a0c3774f1161011f578063a0c3774f14610674578063a2c4564414610687578063a33741771461069a57600080fd5b806390333ba8146106425780639eebe7cd1461065557600080fd5b806383f3084f1161016b57806383f3084f146106145780638456cb59146106275780638a5215861461062f57600080fd5b80636aacaad8146105b55780637125590a1461060157600080fd5b80633f4ba83a1161023f5780634fd49efd116101f35780635ea54eee116101cd5780635ea54eee1461054d578063635600861461057957806363e133bc1461058c57600080fd5b80634fd49efd146104e757806351a424b1146104fa5780635670e2ce1461053257600080fd5b806342d4693e1161022457806342d4693e1461046d57806344578099146104875780634a45a3a8146104b257600080fd5b80633f4ba83a14610452578063423a4b401461045a57600080fd5b8063221a8c68116102965780632be5f0c71161027b5780632be5f0c71461041957806330eae5721461042c5780633b191c971461043f57600080fd5b8063221a8c68146103625780632384c32d1461040657600080fd5b8063119a5e96116102c7578063119a5e961461030b578063180551e91461033c578063219723841461034f57600080fd5b80630fe105e8146102e357806310188aef146102f8575b600080fd5b6102f66102f13660046143d5565b6107e9565b005b6102f661030636600461442e565b610822565b61031361084f565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6102f661034a3660046145cf565b610886565b6102f661035d3660046146d3565b610a3e565b6103d461037036600461442e565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610333565b6102f6610414366004614797565b610aee565b6102f66104273660046147dd565b610b1d565b6102f661043a366004614825565b610b48565b6102f661044d366004614c6f565b610b85565b6102f6610cab565b6102f6610468366004614797565b610d32565b600f5461047a9060ff1681565b6040516103339190614d94565b61049a61049536600461442e565b610d61565b6040516001600160a01b039091168152602001610333565b6104d97f786e6ab94efb5bc7ef1115d1eacf8e0277e0f6954215299c7bb62360d4271aff81565b604051908152602001610333565b60015461049a906001600160a01b031681565b61050d61050836600461442e565b610d9e565b604080516001600160a01b039094168452602084019290925290820152606001610333565b60025460035460408051928352602083019190915201610333565b600654600754600854600954604080519485526020850193909352918301526060820152608001610333565b6102f661058736600461442e565b610dc7565b61049a61059a36600461442e565b601f602052600090815260409020546001600160a01b031681565b6103d46040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102f661060f366004614dbc565b610df0565b601c5461049a906001600160a01b031681565b6102f6610e1b565b601d5461049a906001600160a01b031681565b6102f6610650366004614dde565b610e8d565b6104d961066336600461442e565b602080526000908152604090205481565b6104d961068236600461442e565b610ec0565b6102f6610695366004614e13565b610f57565b61050d604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61050d6106db36600461442e565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546107349060ff1681565b6040519015158152602001610333565b6104d9601e5481565b6001546001600160a01b031661049a565b6102f661076c366004614e2c565b610f80565b60005461049a906201000090046001600160a01b031681565b6102f6610798366004614dde565b610fab565b6103d46107ab36600461442e565b610fd8565b6104d96107be36600461442e565b611047565b6102f66107d1366004614e58565b611075565b6107346107e436600461442e565b6110a4565b6107f88460ff168484846110d9565b61080f336000356001600160e01b03191683611184565b61081b858585856111cb565b5050505050565b61082b81611470565b610842336000356001600160e01b03191683611184565b61084b82611484565b5050565b600a5460009081908190819060ff16600281111561086f5761086f614d7e565b600b54600c54600e54935093509350935090919293565b6108978686868662ffffff1661150e565b6108ae336000356001600160e01b03191683611184565b856000036108c2576108bf87610ec0565b95505b6108cd87878761154e565b60006108d888610d61565b905060006108e68983611559565b9050600061090f6108ff89670de0b6b3a7640000614ea0565b6109098b85611565565b90611565565b90506000635964ca9660e01b8b858c858c8c8c6040516024016109389796959493929190614ef3565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd926109d29216908690600401614fd5565b6000604051808303816000875af11580156109f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a199190810190614ff7565b9050610a308c8c8c88610a2b866115d8565b6115e5565b505050505050505050505050565b610a54336000356001600160e01b0319166115f2565b8051825114610a8f576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610ae957610ad7838281518110610ab057610ab061508b565b6020026020010151838381518110610aca57610aca61508b565b602002602001015161160e565b80610ae1816150a1565b915050610a92565b505050565b610afa848484846116b8565b610b11336000356001600160e01b03191683611184565b61081b85858585611721565b610b2782826117da565b610b3e336000356001600160e01b03191683611184565b610ae98383611852565b610b65816001811115610b5d57610b5d614d7e565b60ff166118d9565b610b7c336000356001600160e01b03191683611184565b61084b82611920565b600054610100900460ff1615808015610ba55750600054600160ff909116105b80610bbf5750303b158015610bbf575060005460ff166001145b610c365760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610c59576000805461ff0019166101001790555b610c628261197d565b801561084b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610cc1336000356001600160e01b0319166115f2565b60045460ff16610cfd576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610d3e848484846116b8565b610d55336000356001600160e01b03191683611184565b61081b858585856119ed565b6001600160a01b038082166000908152601f60205260408120549091168015610d8a5780610d97565b601d546001600160a01b03165b9392505050565b600080600080610dad85611aad565b805160208201516040909201519097919650945092505050565b610dd081611470565b610de7336000356001600160e01b03191683611184565b61084b82611b38565b610dfa8282611b82565b610e11336000356001600160e01b03191683611184565b610ae98383611bdc565b610e31336000356001600160e01b0319166115f2565b60045460ff1615610e555760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610e98838383611c5f565b610eaf336000356001600160e01b03191683611184565b610eba848484611cf1565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5191906150ba565b92915050565b610f60816118d9565b610f77336000356001600160e01b03191683611184565b61084b82611d47565b610f8a8282611da5565b610fa1336000356001600160e01b03191683611184565b610ae98383611e02565b610fb6838383611c5f565b610fcd336000356001600160e01b03191683611184565b610eba848484611e9c565b600080600080600080610fea87611ef8565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b0381166000908152602080526040812054801561106b5780610d97565b601e549392505050565b611081848484846110d9565b611098336000356001600160e01b03191683611184565b61081b85858585611f2c565b6000806110b2601084611fc7565b90506001600f5460ff1660018111156110cd576110cd614d7e565b14610f51578015610d97565b60408051600480825260a082019092526060916020820160808036833701905050905084816000815181106111105761111061508b565b60200260200101818152505083816001815181106111305761113061508b565b60200260200101818152505082816002815181106111505761115061508b565b60200260200101818152505081816003815181106111705761117061508b565b602002602001018181525050949350505050565b61118f838383611fe9565b610ae9578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610c2d93929190615103565b60ff841661127c5760008111806111e25750600082115b1561127757826000036112145760405163bea499cb60e01b815260ff8516600482015260248101849052604401610c2d565b80158061122057508281115b1561124a57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610c2d565b8160000361127757604051635686bf5960e11b815260ff8516600482015260248101839052604401610c2d565b6113d9565b826000036112a95760405163bea499cb60e01b815260ff8516600482015260248101849052604401610c2d565b8015806112c157506112be6224ea0084615135565b81115b156112eb57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610c2d565b8160000361131857604051635686bf5960e11b815260ff8516600482015260248101839052604401610c2d565b60001960ff85160161135a57601c61132f8361207f565b111561127757604051635686bf5960e11b815260ff8516600482015260248101839052604401610c2d565b60011960ff8516016113a25761136f82612096565b6113788361207f565b1461127757604051635686bf5960e11b815260ff8516600482015260248101839052604401610c2d565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610c2d565b8360ff1660028111156113ee576113ee614d7e565b600a805460ff1916600183600281111561140a5761140a614d7e565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610f51826001600160a01b03166118d9565b6001600160a01b0381166114c4576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106111105761111061508b565b610ae98383836120b9565b6000610d9783836121c0565b600082820283158015906115885750828482816115845761158461514c565b0414155b156115b057604051637472527d60e11b81526004810185905260248101849052604401610c2d565b80156115cd57670de0b6b3a76400006000198201046001016115d0565b60005b949350505050565b6000610f518260006123bf565b61081b858585858561241c565b60408051600081526020810190915261084b9083908390611184565b6001600160a01b03821661164e576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806116635761165e601083612430565b61166e565b61166e601083612445565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c826040516116ac911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106116f8576116f861508b565b602002602001018181525050836001600160a01b0316816001815181106111305761113061508b565b6001600160a01b038416611761576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526015602052604090206117859084848461245a565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b0316816000815181106118175761181761508b565b602002602001018181525050816001600160a01b0316816001815181106118405761184061508b565b60200260200101818152505092915050565b6001600160a01b03821661187957604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f791016116ac565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061190f5761190f61508b565b602002602001018181525050919050565b600f805482919060ff19166001838181111561193e5761193e614d7e565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516119729190614d94565b60405180910390a150565b600054610100900460ff166119d65760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b80516119e19061252a565b6119ea81612599565b50565b6001600160a01b038416611a2d576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611a51908484846125f2565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611a9f929190918252602082015260400190565b60405180910390a350505050565b611ada604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611b035780611b06565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611bb957611bb961508b565b6020026020010181815250508160001c816001815181106118405761184061508b565b8082148015611bea57508115155b15611c24576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610c2d565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611c9e57611c9e61508b565b6020026020010181815250508281600181518110611cbe57611cbe61508b565b6020026020010181815250508181600281518110611cde57611cde61508b565b6020026020010181815250509392505050565b611cfe60168484846125f2565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611d705760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf890602001611972565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611de257611de261508b565b60200260200101818152505081816001815181106118405761184061508b565b6001600160a01b038216611e2957604051636070789160e11b815260040160405180910390fd5b670de0b6b3a7640000811115611e525760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed391016116ac565b611ea9601284848461245a565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b602052604081208054919290911615611f235780610d97565b60169392505050565b670de0b6b3a7640000811115611f6e576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d69190608001611462565b6001600160a01b03811660009081526001830160205260408120541515610d97565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b03169063285228959061203e908790309088908890600401615162565b602060405180830381865afa15801561205b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d091906151a8565b60006115d061209162015180846151c5565b612751565b600080806120aa61209162015180866151c5565b50915091506115d082826127ed565b6120c38383612873565b6001600160a01b0383166120ea57604051636070789160e11b815260040160405180910390fd5b81600003612124576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061212f84610d61565b6001600160a01b03160361216f576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061217a84611047565b905080821115610eba576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610c2d565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223a91906151d9565b90506001600160a01b03811661228b576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610c2d565b60006122956128b9565b9050805160001461232657816001600160a01b031663355efdd96122b887612939565b6122c187612939565b846040518463ffffffff1660e01b81526004016122e0939291906151f6565b602060405180830381865afa1580156122fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232191906150ba565b6123b6565b816001600160a01b031663ac41865a61233e87612939565b61234787612939565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b691906150ba565b95945050505050565b60006123cc826020615222565b835110156124135782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610c2d918491600401918252602082015260400190565b50016020015190565b612426828261296d565b61081b85856129f3565b6000610d97836001600160a01b038416612a1b565b6000610d97836001600160a01b038416612b15565b60006001600160a01b038416158015612471575082155b801561247b575081155b905060006001600160a01b0385161580159061249f575082158061249f5750838310155b9050811580156124ad575080155b156124fd576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610c2d565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff166125835760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6125908160a00151612b64565b6119ea81612c11565b600054610100900460ff166119ea5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b60006001600160a01b038416158015612609575082155b8015612613575081155b905060006001600160a01b0385161580159061262f5750600084115b801561263b5750600083115b905081158015612649575080155b15612699576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610c2d565b600386018390556001860184905581156126c057600060028701819055600487015561272c565b85600401546000036126e757600060028701556126dd8342615222565b600487015561272c565b85546001600160a01b0386811691161461272c578554600090612713906001600160a01b031687611559565b60028801549091506127259082612d6c565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816127ae576127ae61514c565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806127fe5750816003145b806128095750816005145b806128145750816007145b8061281f5750816008145b8061282a575081600a145b80612835575081600c145b156128425750601f610f51565b816002146128525750601e610f51565b61285b83612dc9565b61286657601c612869565b601d5b60ff169392505050565b61287d8282612e05565b6128878282612e0f565b6128918282612e33565b61289b8282612f1f565b6128a5828261310e565b6128af8282613158565b61084b8282613245565b606060006128c561335b565b9050368111156128e357505060408051600081526020810190915290565b8067ffffffffffffffff8111156128fc576128fc61445e565b6040519080825280601f01601f191660200182016040528015612926576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316146129655781610f51565b610f51613376565b6003541561084b576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b1580156129d757600080fd5b505af11580156129eb573d6000803e3d6000fd5b505050505050565b6129fd8282613402565b612a0782826134a4565b612a1182826134c6565b61084b8282613710565b60008181526001830160205260408120548015612b04576000612a3f600183614ea0565b8554909150600090612a5390600190614ea0565b9050818114612ab8576000866000018281548110612a7357612a7361508b565b9060005260206000200154905080876000018481548110612a9657612a9661508b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612ac957612ac9615235565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610f51565b6000915050610f51565b5092915050565b6000818152600183016020526040812054612b5c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f51565b506000610f51565b600054610100900460ff16612bbd5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b8051612bc89061373d565b612bd061380d565b612bdd8160200151613870565b612bea81604001516138d2565b612bf78160600151613934565b612c048160800151613996565b6119e18160a001516139f8565b600054610100900460ff16612c6a5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b8051612c7590611484565b612c828160200151611b38565b612c8f8160400151611d47565b60005b816060015151811015612cfd57612ceb82606001518281518110612cb857612cb861508b565b60200260200101516000015183606001518381518110612cda57612cda61508b565b602002602001015160200151611852565b80612cf5816150a1565b915050612c92565b5060005b81608001515181101561084b57612d5a82608001518281518110612d2757612d2761508b565b60200260200101516000015183608001518381518110612d4957612d4961508b565b602002602001015160200151611e02565b80612d64816150a1565b915050612d01565b60008282028315801590612d8f575082848281612d8b57612d8b61514c565b0414155b15612db757604051637472527d60e11b81526004810185905260248101849052604401610c2d565b670de0b6b3a764000090049392505050565b6000612dd660048361524b565b158015612dec5750612de960648361524b565b15155b80610f515750612dfe6101908361524b565b1592915050565b61084b8282613a5a565b60045460ff161561084b5760405163181e462560e31b815260040160405180910390fd5b5a600555604080516080810182526006548082526007546020830152600854928201929092526009546060820152906000901580612e72575081513a11155b905080612eb75781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610c2d565b602082015115610eba576000612ecd483a614ea0565b6020840151909150811115806129eb5760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610c2d918491600401918252602082015260400190565b600a54600b54600c54600e5460ff9093169242821115612f5b5760405163013ce60b60e01b815242600482015260248101839052604401610c2d565b6000846002811115612f6f57612f6f614d7e565b036130285782600003612f8457505050505050565b80600003612f9e57612f968342615222565b600d556129eb565b6000612faa8342614ea0565b90506000612fb885836151c5565b90506000612fc68683615135565b612fd09084614ea0565b905083811115612ffc5760405163013ce60b60e01b815242600482015260248101869052604401610c2d565b85613008836001615222565b6130129190615135565b61301c9086615222565b600d55506129eb915050565b814210158015613041575061303d8183615222565b4211155b1561305057612f968284613aad565b6000600185600281111561306657613066614d7e565b146130795761307442612096565b613082565b6130828361207f565b905060006130908483613b45565b9050804210156130bc5760405163013ce60b60e01b815242600482015260248101829052604401610c2d565b60006130c88483615222565b905042811080156130f55760405163013ce60b60e01b815242600482015260248101839052604401610c2d565b6130ff8388613aad565b600d5550505050505050505050565b613117826110a4565b61084b576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610c2d565b600061316383611aad565b80519091506001600160a01b031661317a57505050565b6000836001600160a01b031682600001516001600160a01b0316146131b6576131b16131aa858460000151611559565b8490612d6c565b6131b8565b825b90506000826020015182101580156131e05750604083015115806131e0575082604001518211155b90508061081b578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610c2d565b600061325083611ef8565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061329f57505050565b6000836001600160a01b031682600001516001600160a01b0316146132d4576132cf6131aa858460000151611559565b6132d6565b825b90506000826080015142106132ec5760006132f2565b82604001515b6132fc9083615222565b9050826020015181111561081b57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610c2d565b6000602436101561336c5750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa1580156133d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fd91906151d9565b905090565b600061340d83611ef8565b80549091506001600160a01b031661342457505050565b80546000906001600160a01b0385811691161461345a578154613455906131aa9086906001600160a01b0316611559565b61345c565b825b9050816004015442106134855760006002830155600382015461347f9042615222565b60048301555b808260020160008282546134999190615222565b909155505050505050565b600d546000036134b2575050565b6134bd600d54613b64565b50506000600d55565b600554600003613502576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a60055461353b9190614ea0565b905060006135493a83615135565b90506000836040015160001480613564575083604001518211155b9050806135ae578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610c2d929190918252602082015260400190565b60006005556060840151158015906135c65750600085115b156129eb576000613699306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561360e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363291906151d9565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561366f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369391906151d9565b88611559565b905060006136a78483611565565b905060006136b58289613b99565b905086606001518111156137055760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610c2d918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff166137965760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b61380481600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ff91906151d9565b613c62565b6119ea81613cc4565b600054610100900460ff166138665760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b61386e613d52565b565b600054610100900460ff166138c95760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea81613dab565b600054610100900460ff1661392b5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea81613e20565b600054610100900460ff1661398d5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea81613e95565b600054610100900460ff166139ef5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea81613f43565b600054610100900460ff16613a515760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea81614021565b6002541561084b5760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb906084016129bd565b600080600080613abc866140ff565b919450925090506000613acf8684615222565b90506000613ade600c8361524b565b90506000613aed600c846151c5565b613af79087615222565b905060006002600a5460ff166002811115613b1457613b14614d7e565b14613b1f5784613b29565b613b2982846127ed565b9050613b378a83858461411e565b9a9950505050505050505050565b6000806000613b53426140ff565b50915091506123b68583838761411e565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611972565b600081600003613bd5576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003613be557506000610f51565b670de0b6b3a764000083810290848281613c0157613c0161514c565b0414613c43576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610c2d565b826001820381613c5557613c5561514c565b0460010191505092915050565b600054610100900460ff16613cbb5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea81614146565b600054610100900460ff16613d1d5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b8051600180546001600160a01b0319166001600160a01b03909216919091179055602081015160408201516119ea9190611bdc565b600054610100900460ff1661386e5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b600054610100900460ff16613e045760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea8160000151826020015183604001518460600151611f2c565b600054610100900460ff16613e795760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea81600001518260200151836040015184606001516111cb565b600054610100900460ff16613eee5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b8051613ef990611920565b60005b81602001515181101561084b57613f3182602001518281518110613f2257613f2261508b565b6020026020010151600161160e565b80613f3b816150a1565b915050613efc565b600054610100900460ff16613f9c5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b8051805160208201516040830151613fb5929190611e9c565b60005b826020015151811015610ae957600083602001518281518110613fdd57613fdd61508b565b6020026020010151905060008160200151905061400c8260000151826000015183602001518460400151611721565b50508080614019906150a1565b915050613fb8565b600054610100900460ff1661407a5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b8051805160208201516040830151614093929190611cf1565b60005b826020015151811015610ae9576000836020015182815181106140bb576140bb61508b565b602002602001015190506000816020015190506140ea82600001518260000151836020015184604001516119ed565b505080806140f7906150a1565b915050614096565b60008080614111620151808504612751565b9196909550909350915050565b60006123b684848461412f896141df565b6141388a6141fd565b6141418b614219565b614226565b600054610100900460ff1661419f5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000806141ef620151808461524b565b9050610d97610e10826151c5565b60008061420c610e108461524b565b9050610d97603c826151c5565b6000610f51603c8361524b565b600081614234603c85615135565b614240610e1087615135565b6201518061424f8b8b8b614282565b6142599190615135565b6142639190615222565b61426d9190615222565b6142779190615222565b979650505050505050565b60006107b284101561429357600080fd5b838383600062253d8c60046064600c6142ad600e8861525f565b6142b7919061527f565b6142c3886113246152ad565b6142cd91906152ad565b6142d7919061527f565b6142e29060036152d5565b6142ec919061527f565b600c806142fa600e8861525f565b614304919061527f565b61430f90600c6152d5565b61431a60028861525f565b614324919061525f565b6143309061016f6152d5565b61433a919061527f565b6004600c614349600e8961525f565b614353919061527f565b61435f896112c06152ad565b61436991906152ad565b614375906105b56152d5565b61437f919061527f565b61438b617d4b8761525f565b61439591906152ad565b61439f91906152ad565b6143a9919061525f565b6143b3919061525f565b98975050505050505050565b803560ff811681146143d057600080fd5b919050565b600080600080608085870312156143eb57600080fd5b6143f4856143bf565b966020860135965060408601359560600135945092505050565b6001600160a01b03811681146119ea57600080fd5b80356143d08161440e565b60006020828403121561444057600080fd5b8135610d978161440e565b803562ffffff811681146143d057600080fd5b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156144975761449761445e565b60405290565b6040516080810167ffffffffffffffff811182821017156144975761449761445e565b60405160c0810167ffffffffffffffff811182821017156144975761449761445e565b6040516020810167ffffffffffffffff811182821017156144975761449761445e565b604051601f8201601f1916810167ffffffffffffffff8111828210171561452f5761452f61445e565b604052919050565b600067ffffffffffffffff8211156145515761455161445e565b5060051b60200190565b600082601f83011261456c57600080fd5b8135602061458161457c83614537565b614506565b82815260059290921b840181019181810190868411156145a057600080fd5b8286015b848110156145c45780356145b78161440e565b83529183019183016145a4565b509695505050505050565b60008060008060008060c087890312156145e857600080fd5b86356145f38161440e565b95506020878101359550604088013594506146106060890161444b565b9350608088013567ffffffffffffffff8082111561462d57600080fd5b6146398b838c0161455b565b945060a08a013591508082111561464f57600080fd5b508801601f81018a1361466157600080fd5b803561466f61457c82614537565b81815260059190911b8201830190838101908c83111561468e57600080fd5b928401925b828410156146b3576146a48461444b565b82529284019290840190614693565b80955050505050509295509295509295565b80151581146119ea57600080fd5b600080604083850312156146e657600080fd5b823567ffffffffffffffff808211156146fe57600080fd5b61470a8683870161455b565b935060209150818501358181111561472157600080fd5b85019050601f8101861361473457600080fd5b803561474261457c82614537565b81815260059190911b8201830190838101908883111561476157600080fd5b928401925b82841015614788578335614779816146c5565b82529284019290840190614766565b80955050505050509250929050565b600080600080608085870312156147ad57600080fd5b84356147b88161440e565b935060208501356147c88161440e565b93969395505050506040820135916060013590565b600080604083850312156147f057600080fd5b82356147fb8161440e565b9150602083013561480b8161440e565b809150509250929050565b8035600281106143d057600080fd5b60006020828403121561483757600080fd5b610d9782614816565b600082601f83011261485157600080fd5b8135602061486161457c83614537565b82815260069290921b8401810191818101908684111561488057600080fd5b8286015b848110156145c4576040818903121561489d5760008081fd5b6148a5614474565b81356148b08161440e565b8152818501356148bf8161440e565b81860152835291830191604001614884565b600082601f8301126148e257600080fd5b813560206148f261457c83614537565b82815260069290921b8401810191818101908684111561491157600080fd5b8286015b848110156145c4576040818903121561492e5760008081fd5b614936614474565b81356149418161440e565b81528185013585820152835291830191604001614915565b60006060828403121561496b57600080fd5b6040516060810181811067ffffffffffffffff8211171561498e5761498e61445e565b604052905080823561499f8161440e565b8082525060208301356020820152604083013560408201525092915050565b6000608082840312156149d057600080fd5b6149d861449d565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215614a1457600080fd5b614a1c61449d565b9050614a27826143bf565b815260208201356020820152604082013560408201526060820135606082015292915050565b600060408284031215614a5f57600080fd5b614a67614474565b9050614a7282614816565b8152602082013567ffffffffffffffff811115614a8e57600080fd5b614a9a8482850161455b565b60208301525092915050565b600060808284031215614ab857600080fd5b614ac0614474565b90508135614acd8161440e565b8152614adc8360208401614959565b602082015292915050565b60006080808385031215614afa57600080fd5b614b02614474565b9150614b0e8484614959565b8252606083013567ffffffffffffffff811115614b2a57600080fd5b8301601f81018513614b3b57600080fd5b80356020614b4b61457c83614537565b82815260079290921b83018101918181019088841115614b6a57600080fd5b938201935b83851015614b9057614b818986614aa6565b82529385019390820190614b6f565b808388015250505050505092915050565b60006101c08284031215614bb457600080fd5b614bbc6144c0565b9050614bc88383614959565b8152614bd783606084016149be565b6020820152614be98360e08401614a02565b604082015261016082013567ffffffffffffffff80821115614c0a57600080fd5b614c1685838601614a4d565b6060840152610180840135915080821115614c3057600080fd5b614c3c85838601614ae7565b60808401526101a0840135915080821115614c5657600080fd5b50614c6384828501614ae7565b60a08301525092915050565b600060208284031215614c8157600080fd5b813567ffffffffffffffff80821115614c9957600080fd5b9083019060208286031215614cad57600080fd5b614cb56144e3565b823582811115614cc457600080fd5b929092019160c08387031215614cd957600080fd5b614ce16144c0565b614cea84614423565b8152614cf860208501614423565b602082015260408401356040820152606084013583811115614d1957600080fd5b614d2588828701614840565b606083015250608084013583811115614d3d57600080fd5b614d49888287016148d1565b60808301525060a084013583811115614d6157600080fd5b614d6d88828701614ba1565b60a083015250815295945050505050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614db657634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215614dcf57600080fd5b50508035926020909101359150565b600080600060608486031215614df357600080fd5b8335614dfe8161440e565b95602085013595506040909401359392505050565b600060208284031215614e2557600080fd5b5035919050565b60008060408385031215614e3f57600080fd5b8235614e4a8161440e565b946020939093013593505050565b60008060008060808587031215614e6e57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610f5157610f51614e8a565b600081518084526020808501945080840160005b83811015614ee857815162ffffff1687529582019590820190600101614ec7565b509495945050505050565b600060e082016001600160a01b03808b1684526020818b168186015289604086015288606086015262ffffff8816608086015260e060a086015282875180855261010087019150828901945060005b81811015614f60578551851683529483019491830191600101614f42565b505085810360c0870152614f748188614eb3565b9d9c50505050505050505050505050565b60005b83811015614fa0578181015183820152602001614f88565b50506000910152565b60008151808452614fc1816020860160208601614f85565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082015260006115d06040830184614fa9565b60006020828403121561500957600080fd5b815167ffffffffffffffff8082111561502157600080fd5b818401915084601f83011261503557600080fd5b8151818111156150475761504761445e565b61505a601f8201601f1916602001614506565b915080825285602082850101111561507157600080fd5b615082816020840160208601614f85565b50949350505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016150b3576150b3614e8a565b5060010190565b6000602082840312156150cc57600080fd5b5051919050565b600081518084526020808501945080840160005b83811015614ee8578151875295820195908201906001016150e7565b6001600160a01b03841681526001600160e01b0319831660208201526060604082015260006123b660608301846150d3565b8082028115828204841417610f5157610f51614e8a565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b0319841660408301526080606083015261519e60808301846150d3565b9695505050505050565b6000602082840312156151ba57600080fd5b8151610d97816146c5565b6000826151d4576151d461514c565b500490565b6000602082840312156151eb57600080fd5b8151610d978161440e565b60006001600160a01b038086168352808516602084015250606060408301526123b66060830184614fa9565b80820180821115610f5157610f51614e8a565b634e487b7160e01b600052603160045260246000fd5b60008261525a5761525a61514c565b500690565b8181036000831280158383131683831282161715612b0e57612b0e614e8a565b60008261528e5761528e61514c565b600160ff1b8214600019841416156152a8576152a8614e8a565b500590565b80820182811260008312801582168215821617156152cd576152cd614e8a565b505092915050565b80820260008212600160ff1b841416156152f1576152f1614e8a565b8181058314821517610f5157610f51614e8a56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220c0f3c15b7f4f886bda111ebe91e523828daf64ff0f44a6510e9c8d99c997f41e64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c80636aacaad811610186578063a5900c4d116100e3578063d09edf3111610097578063d86483e111610071578063d86483e1146107b0578063e6b5be98146107c3578063f9eaee0d146107d657600080fd5b8063d09edf3114610771578063d3feb6021461078a578063d45a76cf1461079d57600080fd5b8063b96e422c116100c8578063b96e422c14610744578063c267621e1461074d578063c47590e41461075e57600080fd5b8063a5900c4d146106cd578063b187bd261461072757600080fd5b806390333ba81161013a578063a0c3774f1161011f578063a0c3774f14610674578063a2c4564414610687578063a33741771461069a57600080fd5b806390333ba8146106425780639eebe7cd1461065557600080fd5b806383f3084f1161016b57806383f3084f146106145780638456cb59146106275780638a5215861461062f57600080fd5b80636aacaad8146105b55780637125590a1461060157600080fd5b80633f4ba83a1161023f5780634fd49efd116101f35780635ea54eee116101cd5780635ea54eee1461054d578063635600861461057957806363e133bc1461058c57600080fd5b80634fd49efd146104e757806351a424b1146104fa5780635670e2ce1461053257600080fd5b806342d4693e1161022457806342d4693e1461046d57806344578099146104875780634a45a3a8146104b257600080fd5b80633f4ba83a14610452578063423a4b401461045a57600080fd5b8063221a8c68116102965780632be5f0c71161027b5780632be5f0c71461041957806330eae5721461042c5780633b191c971461043f57600080fd5b8063221a8c68146103625780632384c32d1461040657600080fd5b8063119a5e96116102c7578063119a5e961461030b578063180551e91461033c578063219723841461034f57600080fd5b80630fe105e8146102e357806310188aef146102f8575b600080fd5b6102f66102f13660046143d5565b6107e9565b005b6102f661030636600461442e565b610822565b61031361084f565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6102f661034a3660046145cf565b610886565b6102f661035d3660046146d3565b610a3e565b6103d461037036600461442e565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610333565b6102f6610414366004614797565b610aee565b6102f66104273660046147dd565b610b1d565b6102f661043a366004614825565b610b48565b6102f661044d366004614c6f565b610b85565b6102f6610cab565b6102f6610468366004614797565b610d32565b600f5461047a9060ff1681565b6040516103339190614d94565b61049a61049536600461442e565b610d61565b6040516001600160a01b039091168152602001610333565b6104d97f786e6ab94efb5bc7ef1115d1eacf8e0277e0f6954215299c7bb62360d4271aff81565b604051908152602001610333565b60015461049a906001600160a01b031681565b61050d61050836600461442e565b610d9e565b604080516001600160a01b039094168452602084019290925290820152606001610333565b60025460035460408051928352602083019190915201610333565b600654600754600854600954604080519485526020850193909352918301526060820152608001610333565b6102f661058736600461442e565b610dc7565b61049a61059a36600461442e565b601f602052600090815260409020546001600160a01b031681565b6103d46040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102f661060f366004614dbc565b610df0565b601c5461049a906001600160a01b031681565b6102f6610e1b565b601d5461049a906001600160a01b031681565b6102f6610650366004614dde565b610e8d565b6104d961066336600461442e565b602080526000908152604090205481565b6104d961068236600461442e565b610ec0565b6102f6610695366004614e13565b610f57565b61050d604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61050d6106db36600461442e565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546107349060ff1681565b6040519015158152602001610333565b6104d9601e5481565b6001546001600160a01b031661049a565b6102f661076c366004614e2c565b610f80565b60005461049a906201000090046001600160a01b031681565b6102f6610798366004614dde565b610fab565b6103d46107ab36600461442e565b610fd8565b6104d96107be36600461442e565b611047565b6102f66107d1366004614e58565b611075565b6107346107e436600461442e565b6110a4565b6107f88460ff168484846110d9565b61080f336000356001600160e01b03191683611184565b61081b858585856111cb565b5050505050565b61082b81611470565b610842336000356001600160e01b03191683611184565b61084b82611484565b5050565b600a5460009081908190819060ff16600281111561086f5761086f614d7e565b600b54600c54600e54935093509350935090919293565b6108978686868662ffffff1661150e565b6108ae336000356001600160e01b03191683611184565b856000036108c2576108bf87610ec0565b95505b6108cd87878761154e565b60006108d888610d61565b905060006108e68983611559565b9050600061090f6108ff89670de0b6b3a7640000614ea0565b6109098b85611565565b90611565565b90506000635964ca9660e01b8b858c858c8c8c6040516024016109389796959493929190614ef3565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd926109d29216908690600401614fd5565b6000604051808303816000875af11580156109f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a199190810190614ff7565b9050610a308c8c8c88610a2b866115d8565b6115e5565b505050505050505050505050565b610a54336000356001600160e01b0319166115f2565b8051825114610a8f576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610ae957610ad7838281518110610ab057610ab061508b565b6020026020010151838381518110610aca57610aca61508b565b602002602001015161160e565b80610ae1816150a1565b915050610a92565b505050565b610afa848484846116b8565b610b11336000356001600160e01b03191683611184565b61081b85858585611721565b610b2782826117da565b610b3e336000356001600160e01b03191683611184565b610ae98383611852565b610b65816001811115610b5d57610b5d614d7e565b60ff166118d9565b610b7c336000356001600160e01b03191683611184565b61084b82611920565b600054610100900460ff1615808015610ba55750600054600160ff909116105b80610bbf5750303b158015610bbf575060005460ff166001145b610c365760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610c59576000805461ff0019166101001790555b610c628261197d565b801561084b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610cc1336000356001600160e01b0319166115f2565b60045460ff16610cfd576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610d3e848484846116b8565b610d55336000356001600160e01b03191683611184565b61081b858585856119ed565b6001600160a01b038082166000908152601f60205260408120549091168015610d8a5780610d97565b601d546001600160a01b03165b9392505050565b600080600080610dad85611aad565b805160208201516040909201519097919650945092505050565b610dd081611470565b610de7336000356001600160e01b03191683611184565b61084b82611b38565b610dfa8282611b82565b610e11336000356001600160e01b03191683611184565b610ae98383611bdc565b610e31336000356001600160e01b0319166115f2565b60045460ff1615610e555760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610e98838383611c5f565b610eaf336000356001600160e01b03191683611184565b610eba848484611cf1565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5191906150ba565b92915050565b610f60816118d9565b610f77336000356001600160e01b03191683611184565b61084b82611d47565b610f8a8282611da5565b610fa1336000356001600160e01b03191683611184565b610ae98383611e02565b610fb6838383611c5f565b610fcd336000356001600160e01b03191683611184565b610eba848484611e9c565b600080600080600080610fea87611ef8565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b0381166000908152602080526040812054801561106b5780610d97565b601e549392505050565b611081848484846110d9565b611098336000356001600160e01b03191683611184565b61081b85858585611f2c565b6000806110b2601084611fc7565b90506001600f5460ff1660018111156110cd576110cd614d7e565b14610f51578015610d97565b60408051600480825260a082019092526060916020820160808036833701905050905084816000815181106111105761111061508b565b60200260200101818152505083816001815181106111305761113061508b565b60200260200101818152505082816002815181106111505761115061508b565b60200260200101818152505081816003815181106111705761117061508b565b602002602001018181525050949350505050565b61118f838383611fe9565b610ae9578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610c2d93929190615103565b60ff841661127c5760008111806111e25750600082115b1561127757826000036112145760405163bea499cb60e01b815260ff8516600482015260248101849052604401610c2d565b80158061122057508281115b1561124a57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610c2d565b8160000361127757604051635686bf5960e11b815260ff8516600482015260248101839052604401610c2d565b6113d9565b826000036112a95760405163bea499cb60e01b815260ff8516600482015260248101849052604401610c2d565b8015806112c157506112be6224ea0084615135565b81115b156112eb57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610c2d565b8160000361131857604051635686bf5960e11b815260ff8516600482015260248101839052604401610c2d565b60001960ff85160161135a57601c61132f8361207f565b111561127757604051635686bf5960e11b815260ff8516600482015260248101839052604401610c2d565b60011960ff8516016113a25761136f82612096565b6113788361207f565b1461127757604051635686bf5960e11b815260ff8516600482015260248101839052604401610c2d565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610c2d565b8360ff1660028111156113ee576113ee614d7e565b600a805460ff1916600183600281111561140a5761140a614d7e565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610f51826001600160a01b03166118d9565b6001600160a01b0381166114c4576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106111105761111061508b565b610ae98383836120b9565b6000610d9783836121c0565b600082820283158015906115885750828482816115845761158461514c565b0414155b156115b057604051637472527d60e11b81526004810185905260248101849052604401610c2d565b80156115cd57670de0b6b3a76400006000198201046001016115d0565b60005b949350505050565b6000610f518260006123bf565b61081b858585858561241c565b60408051600081526020810190915261084b9083908390611184565b6001600160a01b03821661164e576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806116635761165e601083612430565b61166e565b61166e601083612445565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c826040516116ac911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106116f8576116f861508b565b602002602001018181525050836001600160a01b0316816001815181106111305761113061508b565b6001600160a01b038416611761576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526015602052604090206117859084848461245a565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b0316816000815181106118175761181761508b565b602002602001018181525050816001600160a01b0316816001815181106118405761184061508b565b60200260200101818152505092915050565b6001600160a01b03821661187957604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f791016116ac565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061190f5761190f61508b565b602002602001018181525050919050565b600f805482919060ff19166001838181111561193e5761193e614d7e565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516119729190614d94565b60405180910390a150565b600054610100900460ff166119d65760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b80516119e19061252a565b6119ea81612599565b50565b6001600160a01b038416611a2d576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611a51908484846125f2565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611a9f929190918252602082015260400190565b60405180910390a350505050565b611ada604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611b035780611b06565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611bb957611bb961508b565b6020026020010181815250508160001c816001815181106118405761184061508b565b8082148015611bea57508115155b15611c24576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610c2d565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611c9e57611c9e61508b565b6020026020010181815250508281600181518110611cbe57611cbe61508b565b6020026020010181815250508181600281518110611cde57611cde61508b565b6020026020010181815250509392505050565b611cfe60168484846125f2565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611d705760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf890602001611972565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611de257611de261508b565b60200260200101818152505081816001815181106118405761184061508b565b6001600160a01b038216611e2957604051636070789160e11b815260040160405180910390fd5b670de0b6b3a7640000811115611e525760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed391016116ac565b611ea9601284848461245a565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b602052604081208054919290911615611f235780610d97565b60169392505050565b670de0b6b3a7640000811115611f6e576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d69190608001611462565b6001600160a01b03811660009081526001830160205260408120541515610d97565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b03169063285228959061203e908790309088908890600401615162565b602060405180830381865afa15801561205b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d091906151a8565b60006115d061209162015180846151c5565b612751565b600080806120aa61209162015180866151c5565b50915091506115d082826127ed565b6120c38383612873565b6001600160a01b0383166120ea57604051636070789160e11b815260040160405180910390fd5b81600003612124576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061212f84610d61565b6001600160a01b03160361216f576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061217a84611047565b905080821115610eba576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610c2d565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223a91906151d9565b90506001600160a01b03811661228b576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610c2d565b60006122956128b9565b9050805160001461232657816001600160a01b031663355efdd96122b887612939565b6122c187612939565b846040518463ffffffff1660e01b81526004016122e0939291906151f6565b602060405180830381865afa1580156122fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232191906150ba565b6123b6565b816001600160a01b031663ac41865a61233e87612939565b61234787612939565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b691906150ba565b95945050505050565b60006123cc826020615222565b835110156124135782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610c2d918491600401918252602082015260400190565b50016020015190565b612426828261296d565b61081b85856129f3565b6000610d97836001600160a01b038416612a1b565b6000610d97836001600160a01b038416612b15565b60006001600160a01b038416158015612471575082155b801561247b575081155b905060006001600160a01b0385161580159061249f575082158061249f5750838310155b9050811580156124ad575080155b156124fd576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610c2d565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff166125835760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6125908160a00151612b64565b6119ea81612c11565b600054610100900460ff166119ea5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b60006001600160a01b038416158015612609575082155b8015612613575081155b905060006001600160a01b0385161580159061262f5750600084115b801561263b5750600083115b905081158015612649575080155b15612699576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610c2d565b600386018390556001860184905581156126c057600060028701819055600487015561272c565b85600401546000036126e757600060028701556126dd8342615222565b600487015561272c565b85546001600160a01b0386811691161461272c578554600090612713906001600160a01b031687611559565b60028801549091506127259082612d6c565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816127ae576127ae61514c565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806127fe5750816003145b806128095750816005145b806128145750816007145b8061281f5750816008145b8061282a575081600a145b80612835575081600c145b156128425750601f610f51565b816002146128525750601e610f51565b61285b83612dc9565b61286657601c612869565b601d5b60ff169392505050565b61287d8282612e05565b6128878282612e0f565b6128918282612e33565b61289b8282612f1f565b6128a5828261310e565b6128af8282613158565b61084b8282613245565b606060006128c561335b565b9050368111156128e357505060408051600081526020810190915290565b8067ffffffffffffffff8111156128fc576128fc61445e565b6040519080825280601f01601f191660200182016040528015612926576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316146129655781610f51565b610f51613376565b6003541561084b576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b1580156129d757600080fd5b505af11580156129eb573d6000803e3d6000fd5b505050505050565b6129fd8282613402565b612a0782826134a4565b612a1182826134c6565b61084b8282613710565b60008181526001830160205260408120548015612b04576000612a3f600183614ea0565b8554909150600090612a5390600190614ea0565b9050818114612ab8576000866000018281548110612a7357612a7361508b565b9060005260206000200154905080876000018481548110612a9657612a9661508b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612ac957612ac9615235565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610f51565b6000915050610f51565b5092915050565b6000818152600183016020526040812054612b5c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f51565b506000610f51565b600054610100900460ff16612bbd5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b8051612bc89061373d565b612bd061380d565b612bdd8160200151613870565b612bea81604001516138d2565b612bf78160600151613934565b612c048160800151613996565b6119e18160a001516139f8565b600054610100900460ff16612c6a5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b8051612c7590611484565b612c828160200151611b38565b612c8f8160400151611d47565b60005b816060015151811015612cfd57612ceb82606001518281518110612cb857612cb861508b565b60200260200101516000015183606001518381518110612cda57612cda61508b565b602002602001015160200151611852565b80612cf5816150a1565b915050612c92565b5060005b81608001515181101561084b57612d5a82608001518281518110612d2757612d2761508b565b60200260200101516000015183608001518381518110612d4957612d4961508b565b602002602001015160200151611e02565b80612d64816150a1565b915050612d01565b60008282028315801590612d8f575082848281612d8b57612d8b61514c565b0414155b15612db757604051637472527d60e11b81526004810185905260248101849052604401610c2d565b670de0b6b3a764000090049392505050565b6000612dd660048361524b565b158015612dec5750612de960648361524b565b15155b80610f515750612dfe6101908361524b565b1592915050565b61084b8282613a5a565b60045460ff161561084b5760405163181e462560e31b815260040160405180910390fd5b5a600555604080516080810182526006548082526007546020830152600854928201929092526009546060820152906000901580612e72575081513a11155b905080612eb75781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610c2d565b602082015115610eba576000612ecd483a614ea0565b6020840151909150811115806129eb5760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610c2d918491600401918252602082015260400190565b600a54600b54600c54600e5460ff9093169242821115612f5b5760405163013ce60b60e01b815242600482015260248101839052604401610c2d565b6000846002811115612f6f57612f6f614d7e565b036130285782600003612f8457505050505050565b80600003612f9e57612f968342615222565b600d556129eb565b6000612faa8342614ea0565b90506000612fb885836151c5565b90506000612fc68683615135565b612fd09084614ea0565b905083811115612ffc5760405163013ce60b60e01b815242600482015260248101869052604401610c2d565b85613008836001615222565b6130129190615135565b61301c9086615222565b600d55506129eb915050565b814210158015613041575061303d8183615222565b4211155b1561305057612f968284613aad565b6000600185600281111561306657613066614d7e565b146130795761307442612096565b613082565b6130828361207f565b905060006130908483613b45565b9050804210156130bc5760405163013ce60b60e01b815242600482015260248101829052604401610c2d565b60006130c88483615222565b905042811080156130f55760405163013ce60b60e01b815242600482015260248101839052604401610c2d565b6130ff8388613aad565b600d5550505050505050505050565b613117826110a4565b61084b576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610c2d565b600061316383611aad565b80519091506001600160a01b031661317a57505050565b6000836001600160a01b031682600001516001600160a01b0316146131b6576131b16131aa858460000151611559565b8490612d6c565b6131b8565b825b90506000826020015182101580156131e05750604083015115806131e0575082604001518211155b90508061081b578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610c2d565b600061325083611ef8565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061329f57505050565b6000836001600160a01b031682600001516001600160a01b0316146132d4576132cf6131aa858460000151611559565b6132d6565b825b90506000826080015142106132ec5760006132f2565b82604001515b6132fc9083615222565b9050826020015181111561081b57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610c2d565b6000602436101561336c5750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa1580156133d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fd91906151d9565b905090565b600061340d83611ef8565b80549091506001600160a01b031661342457505050565b80546000906001600160a01b0385811691161461345a578154613455906131aa9086906001600160a01b0316611559565b61345c565b825b9050816004015442106134855760006002830155600382015461347f9042615222565b60048301555b808260020160008282546134999190615222565b909155505050505050565b600d546000036134b2575050565b6134bd600d54613b64565b50506000600d55565b600554600003613502576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a60055461353b9190614ea0565b905060006135493a83615135565b90506000836040015160001480613564575083604001518211155b9050806135ae578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610c2d929190918252602082015260400190565b60006005556060840151158015906135c65750600085115b156129eb576000613699306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561360e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363291906151d9565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561366f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369391906151d9565b88611559565b905060006136a78483611565565b905060006136b58289613b99565b905086606001518111156137055760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610c2d918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff166137965760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b61380481600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ff91906151d9565b613c62565b6119ea81613cc4565b600054610100900460ff166138665760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b61386e613d52565b565b600054610100900460ff166138c95760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea81613dab565b600054610100900460ff1661392b5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea81613e20565b600054610100900460ff1661398d5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea81613e95565b600054610100900460ff166139ef5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea81613f43565b600054610100900460ff16613a515760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea81614021565b6002541561084b5760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb906084016129bd565b600080600080613abc866140ff565b919450925090506000613acf8684615222565b90506000613ade600c8361524b565b90506000613aed600c846151c5565b613af79087615222565b905060006002600a5460ff166002811115613b1457613b14614d7e565b14613b1f5784613b29565b613b2982846127ed565b9050613b378a83858461411e565b9a9950505050505050505050565b6000806000613b53426140ff565b50915091506123b68583838761411e565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611972565b600081600003613bd5576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003613be557506000610f51565b670de0b6b3a764000083810290848281613c0157613c0161514c565b0414613c43576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610c2d565b826001820381613c5557613c5561514c565b0460010191505092915050565b600054610100900460ff16613cbb5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea81614146565b600054610100900460ff16613d1d5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b8051600180546001600160a01b0319166001600160a01b03909216919091179055602081015160408201516119ea9190611bdc565b600054610100900460ff1661386e5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b600054610100900460ff16613e045760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea8160000151826020015183604001518460600151611f2c565b600054610100900460ff16613e795760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b6119ea81600001518260200151836040015184606001516111cb565b600054610100900460ff16613eee5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b8051613ef990611920565b60005b81602001515181101561084b57613f3182602001518281518110613f2257613f2261508b565b6020026020010151600161160e565b80613f3b816150a1565b915050613efc565b600054610100900460ff16613f9c5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b8051805160208201516040830151613fb5929190611e9c565b60005b826020015151811015610ae957600083602001518281518110613fdd57613fdd61508b565b6020026020010151905060008160200151905061400c8260000151826000015183602001518460400151611721565b50508080614019906150a1565b915050613fb8565b600054610100900460ff1661407a5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b8051805160208201516040830151614093929190611cf1565b60005b826020015151811015610ae9576000836020015182815181106140bb576140bb61508b565b602002602001015190506000816020015190506140ea82600001518260000151836020015184604001516119ed565b505080806140f7906150a1565b915050614096565b60008080614111620151808504612751565b9196909550909350915050565b60006123b684848461412f896141df565b6141388a6141fd565b6141418b614219565b614226565b600054610100900460ff1661419f5760405162461bcd60e51b815260206004820152602b602482015260008051602061530683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610c2d565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000806141ef620151808461524b565b9050610d97610e10826151c5565b60008061420c610e108461524b565b9050610d97603c826151c5565b6000610f51603c8361524b565b600081614234603c85615135565b614240610e1087615135565b6201518061424f8b8b8b614282565b6142599190615135565b6142639190615222565b61426d9190615222565b6142779190615222565b979650505050505050565b60006107b284101561429357600080fd5b838383600062253d8c60046064600c6142ad600e8861525f565b6142b7919061527f565b6142c3886113246152ad565b6142cd91906152ad565b6142d7919061527f565b6142e29060036152d5565b6142ec919061527f565b600c806142fa600e8861525f565b614304919061527f565b61430f90600c6152d5565b61431a60028861525f565b614324919061525f565b6143309061016f6152d5565b61433a919061527f565b6004600c614349600e8961525f565b614353919061527f565b61435f896112c06152ad565b61436991906152ad565b614375906105b56152d5565b61437f919061527f565b61438b617d4b8761525f565b61439591906152ad565b61439f91906152ad565b6143a9919061525f565b6143b3919061525f565b98975050505050505050565b803560ff811681146143d057600080fd5b919050565b600080600080608085870312156143eb57600080fd5b6143f4856143bf565b966020860135965060408601359560600135945092505050565b6001600160a01b03811681146119ea57600080fd5b80356143d08161440e565b60006020828403121561444057600080fd5b8135610d978161440e565b803562ffffff811681146143d057600080fd5b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156144975761449761445e565b60405290565b6040516080810167ffffffffffffffff811182821017156144975761449761445e565b60405160c0810167ffffffffffffffff811182821017156144975761449761445e565b6040516020810167ffffffffffffffff811182821017156144975761449761445e565b604051601f8201601f1916810167ffffffffffffffff8111828210171561452f5761452f61445e565b604052919050565b600067ffffffffffffffff8211156145515761455161445e565b5060051b60200190565b600082601f83011261456c57600080fd5b8135602061458161457c83614537565b614506565b82815260059290921b840181019181810190868411156145a057600080fd5b8286015b848110156145c45780356145b78161440e565b83529183019183016145a4565b509695505050505050565b60008060008060008060c087890312156145e857600080fd5b86356145f38161440e565b95506020878101359550604088013594506146106060890161444b565b9350608088013567ffffffffffffffff8082111561462d57600080fd5b6146398b838c0161455b565b945060a08a013591508082111561464f57600080fd5b508801601f81018a1361466157600080fd5b803561466f61457c82614537565b81815260059190911b8201830190838101908c83111561468e57600080fd5b928401925b828410156146b3576146a48461444b565b82529284019290840190614693565b80955050505050509295509295509295565b80151581146119ea57600080fd5b600080604083850312156146e657600080fd5b823567ffffffffffffffff808211156146fe57600080fd5b61470a8683870161455b565b935060209150818501358181111561472157600080fd5b85019050601f8101861361473457600080fd5b803561474261457c82614537565b81815260059190911b8201830190838101908883111561476157600080fd5b928401925b82841015614788578335614779816146c5565b82529284019290840190614766565b80955050505050509250929050565b600080600080608085870312156147ad57600080fd5b84356147b88161440e565b935060208501356147c88161440e565b93969395505050506040820135916060013590565b600080604083850312156147f057600080fd5b82356147fb8161440e565b9150602083013561480b8161440e565b809150509250929050565b8035600281106143d057600080fd5b60006020828403121561483757600080fd5b610d9782614816565b600082601f83011261485157600080fd5b8135602061486161457c83614537565b82815260069290921b8401810191818101908684111561488057600080fd5b8286015b848110156145c4576040818903121561489d5760008081fd5b6148a5614474565b81356148b08161440e565b8152818501356148bf8161440e565b81860152835291830191604001614884565b600082601f8301126148e257600080fd5b813560206148f261457c83614537565b82815260069290921b8401810191818101908684111561491157600080fd5b8286015b848110156145c4576040818903121561492e5760008081fd5b614936614474565b81356149418161440e565b81528185013585820152835291830191604001614915565b60006060828403121561496b57600080fd5b6040516060810181811067ffffffffffffffff8211171561498e5761498e61445e565b604052905080823561499f8161440e565b8082525060208301356020820152604083013560408201525092915050565b6000608082840312156149d057600080fd5b6149d861449d565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215614a1457600080fd5b614a1c61449d565b9050614a27826143bf565b815260208201356020820152604082013560408201526060820135606082015292915050565b600060408284031215614a5f57600080fd5b614a67614474565b9050614a7282614816565b8152602082013567ffffffffffffffff811115614a8e57600080fd5b614a9a8482850161455b565b60208301525092915050565b600060808284031215614ab857600080fd5b614ac0614474565b90508135614acd8161440e565b8152614adc8360208401614959565b602082015292915050565b60006080808385031215614afa57600080fd5b614b02614474565b9150614b0e8484614959565b8252606083013567ffffffffffffffff811115614b2a57600080fd5b8301601f81018513614b3b57600080fd5b80356020614b4b61457c83614537565b82815260079290921b83018101918181019088841115614b6a57600080fd5b938201935b83851015614b9057614b818986614aa6565b82529385019390820190614b6f565b808388015250505050505092915050565b60006101c08284031215614bb457600080fd5b614bbc6144c0565b9050614bc88383614959565b8152614bd783606084016149be565b6020820152614be98360e08401614a02565b604082015261016082013567ffffffffffffffff80821115614c0a57600080fd5b614c1685838601614a4d565b6060840152610180840135915080821115614c3057600080fd5b614c3c85838601614ae7565b60808401526101a0840135915080821115614c5657600080fd5b50614c6384828501614ae7565b60a08301525092915050565b600060208284031215614c8157600080fd5b813567ffffffffffffffff80821115614c9957600080fd5b9083019060208286031215614cad57600080fd5b614cb56144e3565b823582811115614cc457600080fd5b929092019160c08387031215614cd957600080fd5b614ce16144c0565b614cea84614423565b8152614cf860208501614423565b602082015260408401356040820152606084013583811115614d1957600080fd5b614d2588828701614840565b606083015250608084013583811115614d3d57600080fd5b614d49888287016148d1565b60808301525060a084013583811115614d6157600080fd5b614d6d88828701614ba1565b60a083015250815295945050505050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614db657634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215614dcf57600080fd5b50508035926020909101359150565b600080600060608486031215614df357600080fd5b8335614dfe8161440e565b95602085013595506040909401359392505050565b600060208284031215614e2557600080fd5b5035919050565b60008060408385031215614e3f57600080fd5b8235614e4a8161440e565b946020939093013593505050565b60008060008060808587031215614e6e57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610f5157610f51614e8a565b600081518084526020808501945080840160005b83811015614ee857815162ffffff1687529582019590820190600101614ec7565b509495945050505050565b600060e082016001600160a01b03808b1684526020818b168186015289604086015288606086015262ffffff8816608086015260e060a086015282875180855261010087019150828901945060005b81811015614f60578551851683529483019491830191600101614f42565b505085810360c0870152614f748188614eb3565b9d9c50505050505050505050505050565b60005b83811015614fa0578181015183820152602001614f88565b50506000910152565b60008151808452614fc1816020860160208601614f85565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082015260006115d06040830184614fa9565b60006020828403121561500957600080fd5b815167ffffffffffffffff8082111561502157600080fd5b818401915084601f83011261503557600080fd5b8151818111156150475761504761445e565b61505a601f8201601f1916602001614506565b915080825285602082850101111561507157600080fd5b615082816020840160208601614f85565b50949350505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016150b3576150b3614e8a565b5060010190565b6000602082840312156150cc57600080fd5b5051919050565b600081518084526020808501945080840160005b83811015614ee8578151875295820195908201906001016150e7565b6001600160a01b03841681526001600160e01b0319831660208201526060604082015260006123b660608301846150d3565b8082028115828204841417610f5157610f51614e8a565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b0319841660408301526080606083015261519e60808301846150d3565b9695505050505050565b6000602082840312156151ba57600080fd5b8151610d97816146c5565b6000826151d4576151d461514c565b500490565b6000602082840312156151eb57600080fd5b8151610d978161440e565b60006001600160a01b038086168352808516602084015250606060408301526123b66060830184614fa9565b80820180821115610f5157610f51614e8a565b634e487b7160e01b600052603160045260246000fd5b60008261525a5761525a61514c565b500690565b8181036000831280158383131683831282161715612b0e57612b0e614e8a565b60008261528e5761528e61514c565b600160ff1b8214600019841416156152a8576152a8614e8a565b500590565b80820182811260008312801582168215821617156152cd576152cd614e8a565b505092915050565b80820260008212600160ff1b841416156152f1576152f1614e8a565b8181058314821517610f5157610f51614e8a56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220c0f3c15b7f4f886bda111ebe91e523828daf64ff0f44a6510e9c8d99c997f41e64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
