{
  "_format": "hh-sol-artifact-1",
  "contractName": "BalancerV2LinearSwapper",
  "sourceName": "contracts/swap/BalancerV2LinearSwapper.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"
        }
      ],
      "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 BalancerV2BptSwapper.BalancerV2BptSwapConfig",
          "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": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6152f880620000f36000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80636aacaad811610186578063a5900c4d116100e3578063d09edf3111610097578063d86483e111610071578063d86483e1146107b0578063e6b5be98146107c3578063f9eaee0d146107d657600080fd5b8063d09edf3114610771578063d3feb6021461078a578063d45a76cf1461079d57600080fd5b8063b96e422c116100c8578063b96e422c14610744578063c267621e1461074d578063c47590e41461075e57600080fd5b8063a5900c4d146106cd578063b187bd261461072757600080fd5b806390333ba81161013a578063a0c3774f1161011f578063a0c3774f14610674578063a2c4564414610687578063a33741771461069a57600080fd5b806390333ba8146106425780639eebe7cd1461065557600080fd5b806383f3084f1161016b57806383f3084f146106145780638456cb59146106275780638a5215861461062f57600080fd5b80636aacaad8146105b55780637125590a1461060157600080fd5b8063423a4b401161023f5780635064d83a116101f35780635ea54eee116101cd5780635ea54eee1461054d578063635600861461057957806363e133bc1461058c57600080fd5b80635064d83a146104e757806351a424b1146104fa5780635670e2ce1461053257600080fd5b8063445780991161022457806344578099146104745780634a45a3a81461049f5780634fd49efd146104d457600080fd5b8063423a4b401461044757806342d4693e1461045a57600080fd5b80632384c32d1161029657806330eae5721161027b57806330eae572146104195780633b191c971461042c5780633f4ba83a1461043f57600080fd5b80632384c32d146103f35780632be5f0c71461040657600080fd5b8063119a5e96116102c7578063119a5e961461030b578063219723841461033c578063221a8c681461034f57600080fd5b80630fe105e8146102e357806310188aef146102f8575b600080fd5b6102f66102f136600461447d565b6107e9565b005b6102f66103063660046144d6565b610822565b61031361084f565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6102f661034a366004614672565b610886565b6103c161035d3660046144d6565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610333565b6102f6610401366004614736565b610936565b6102f661041436600461477c565b610965565b6102f66104273660046147c4565b610990565b6102f661043a366004614c0e565b6109cd565b6102f6610af3565b6102f6610455366004614736565b610b7a565b600f546104679060ff1681565b6040516103339190614d33565b6104876104823660046144d6565b610ba9565b6040516001600160a01b039091168152602001610333565b6104c67f76456852b329dfb8372f4dbf77fd89fe3650d6ac874449ff011ea624b4c258b781565b604051908152602001610333565b600154610487906001600160a01b031681565b6102f66104f5366004614d5b565b610c35565b61050d6105083660046144d6565b610e55565b604080516001600160a01b039094168452602084019290925290820152606001610333565b60025460035460408051928352602083019190915201610333565b600654600754600854600954604080519485526020850193909352918301526060820152608001610333565b6102f66105873660046144d6565b610e7e565b61048761059a3660046144d6565b601f602052600090815260409020546001600160a01b031681565b6103c16040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102f661060f366004614d90565b610ea7565b601c54610487906001600160a01b031681565b6102f6610ed2565b601d54610487906001600160a01b031681565b6102f6610650366004614d5b565b610f44565b6104c66106633660046144d6565b602080526000908152604090205481565b6104c66106823660046144d6565b610f77565b6102f6610695366004614db2565b61100e565b61050d604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61050d6106db3660046144d6565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546107349060ff1681565b6040519015158152602001610333565b6104c6601e5481565b6001546001600160a01b0316610487565b6102f661076c366004614dcb565b611037565b600054610487906201000090046001600160a01b031681565b6102f6610798366004614d5b565b611062565b6103c16107ab3660046144d6565b61108f565b6104c66107be3660046144d6565b6110fe565b6102f66107d1366004614df7565b61112c565b6107346107e43660046144d6565b61115b565b6107f88460ff16848484611190565b61080f336000356001600160e01b0319168361123b565b61081b85858585611282565b5050505050565b61082b81611527565b610842336000356001600160e01b0319168361123b565b61084b8261153b565b5050565b600a5460009081908190819060ff16600281111561086f5761086f614d1d565b600b54600c54600e54935093509350935090919293565b61089c336000356001600160e01b0319166115c5565b80518251146108d7576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156109315761091f8382815181106108f8576108f8614e29565b602002602001015183838151811061091257610912614e29565b60200260200101516115e1565b8061092981614e55565b9150506108da565b505050565b6109428484848461168b565b610959336000356001600160e01b0319168361123b565b61081b858585856116f4565b61096f82826117ad565b610986336000356001600160e01b0319168361123b565b6109318383611825565b6109ad8160018111156109a5576109a5614d1d565b60ff166118ac565b6109c4336000356001600160e01b0319168361123b565b61084b826118f3565b600054610100900460ff16158080156109ed5750600054600160ff909116105b80610a075750303b158015610a07575060005460ff166001145b610a7e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610aa1576000805461ff0019166101001790555b610aaa82611950565b801561084b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610b09336000356001600160e01b0319166115c5565b60045460ff16610b45576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610b868484848461168b565b610b9d336000356001600160e01b0319168361123b565b61081b858585856119c0565b600080610bb583611a80565b90506001600160a01b03811615610bcc5792915050565b826001600160a01b0316634de046d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2e9190614e6e565b9392505050565b610c40838383611abc565b610c57336000356001600160e01b0319168361123b565b82600003610c6b57610c6884610f77565b92505b610c76848484611b4e565b6000610c8185610ba9565b90506000610c8f8683611b59565b90506000610cb8610ca886670de0b6b3a7640000614e8b565b610cb28885611b65565b90611b65565b9050600063be1b4c4960e01b888589858c6001600160a01b03166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190614e9e565b60408051600080825260208201908152818301909252610d5296959493929160648201614efb565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd92610dec9216908690600401614fd7565b6000604051808303816000875af1158015610e0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e339190810190614ff9565b9050610e4a89898988610e4586611bd8565b611be5565b505050505050505050565b600080600080610e6485611bf2565b805160208201516040909201519097919650945092505050565b610e8781611527565b610e9e336000356001600160e01b0319168361123b565b61084b82611c7d565b610eb18282611cc7565b610ec8336000356001600160e01b0319168361123b565b6109318383611d21565b610ee8336000356001600160e01b0319166115c5565b60045460ff1615610f0c5760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610f4f838383611abc565b610f66336000356001600160e01b0319168361123b565b610f71848484611da4565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110089190614e9e565b92915050565b611017816118ac565b61102e336000356001600160e01b0319168361123b565b61084b82611dfa565b6110418282611e58565b611058336000356001600160e01b0319168361123b565b6109318383611eb5565b61106d838383611abc565b611084336000356001600160e01b0319168361123b565b610f71848484611f4f565b6000806000806000806110a187611fab565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b038116600090815260208052604081205480156111225780610c2e565b601e549392505050565b61113884848484611190565b61114f336000356001600160e01b0319168361123b565b61081b85858585611fdf565b60008061116960108461207a565b90506001600f5460ff16600181111561118457611184614d1d565b14611008578015610c2e565b60408051600480825260a082019092526060916020820160808036833701905050905084816000815181106111c7576111c7614e29565b60200260200101818152505083816001815181106111e7576111e7614e29565b602002602001018181525050828160028151811061120757611207614e29565b602002602001018181525050818160038151811061122757611227614e29565b602002602001018181525050949350505050565b61124683838361209c565b610931578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610a75939291906150bd565b60ff84166113335760008111806112995750600082115b1561132e57826000036112cb5760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b8015806112d757508281115b1561130157604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b8160000361132e57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b611490565b826000036113605760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b80158061137857506113756224ea00846150ef565b81115b156113a257604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b816000036113cf57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60001960ff85160161141157601c6113e683612132565b111561132e57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60011960ff8516016114595761142682612149565b61142f83612132565b1461132e57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610a75565b8360ff1660028111156114a5576114a5614d1d565b600a805460ff191660018360028111156114c1576114c1614d1d565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060611008826001600160a01b03166118ac565b6001600160a01b03811661157b576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b60408051600081526020810190915261084b908390839061123b565b6001600160a01b038216611621576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806116365761163160108361216c565b611641565b611641601083612181565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c8260405161167f911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106116cb576116cb614e29565b602002602001018181525050836001600160a01b0316816001815181106111e7576111e7614e29565b6001600160a01b038416611734576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061175890848484612196565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b0316816000815181106117ea576117ea614e29565b602002602001018181525050816001600160a01b03168160018151811061181357611813614e29565b60200260200101818152505092915050565b6001600160a01b03821661184c57604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f7910161167f565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106118e2576118e2614e29565b602002602001018181525050919050565b600f805482919060ff19166001838181111561191157611911614d1d565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516119459190614d33565b60405180910390a150565b600054610100900460ff166119a95760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b80516119b490612266565b6119bd816122d5565b50565b6001600160a01b038416611a00576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611a249084848461232e565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611a72929190918252602082015260400190565b60405180910390a350505050565b6001600160a01b038082166000908152601f60205260408120549091168015611aa95780610c2e565b601d546001600160a01b03169392505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611afb57611afb614e29565b6020026020010181815250508281600181518110611b1b57611b1b614e29565b6020026020010181815250508181600281518110611b3b57611b3b614e29565b6020026020010181815250509392505050565b61093183838361248d565b6000610c2e8383612594565b60008282028315801590611b88575082848281611b8457611b84615106565b0414155b15611bb057604051637472527d60e11b81526004810185905260248101849052604401610a75565b8015611bcd57670de0b6b3a7640000600019820104600101611bd0565b60005b949350505050565b6000611008826000612793565b61081b85858585856127f0565b611c1f604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611c485780611c4b565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611cfe57611cfe614e29565b6020026020010181815250508160001c8160018151811061181357611813614e29565b8082148015611d2f57508115155b15611d69576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610a75565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b611db1601684848461232e565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611e235760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf890602001611945565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611e9557611e95614e29565b602002602001018181525050818160018151811061181357611813614e29565b6001600160a01b038216611edc57604051636070789160e11b815260040160405180910390fd5b670de0b6b3a7640000811115611f055760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed3910161167f565b611f5c6012848484612196565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b602052604081208054919290911615611fd65780610c2e565b60169392505050565b670de0b6b3a7640000811115612021576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d69190608001611519565b6001600160a01b03811660009081526001830160205260408120541515610c2e565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906120f190879030908890889060040161511c565b602060405180830381865afa15801561210e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd09190615162565b6000611bd0612144620151808461517f565b612804565b6000808061215d612144620151808661517f565b5091509150611bd082826128a0565b6000610c2e836001600160a01b038416612926565b6000610c2e836001600160a01b038416612a20565b60006001600160a01b0384161580156121ad575082155b80156121b7575081155b905060006001600160a01b038516158015906121db57508215806121db5750838310155b9050811580156121e9575080155b15612239576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff166122bf5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6122cc8160a00151612a6f565b6119bd81612b1c565b600054610100900460ff166119bd5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b60006001600160a01b038416158015612345575082155b801561234f575081155b905060006001600160a01b0385161580159061236b5750600084115b80156123775750600083115b905081158015612385575080155b156123d5576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b600386018390556001860184905581156123fc576000600287018190556004870155612468565b856004015460000361242357600060028701556124198342615193565b6004870155612468565b85546001600160a01b0386811691161461246857855460009061244f906001600160a01b031687611b59565b60028801549091506124619082612c77565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b6124978383612cd4565b6001600160a01b0383166124be57604051636070789160e11b815260040160405180910390fd5b816000036124f8576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061250384610ba9565b6001600160a01b031603612543576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061254e846110fe565b905080821115610f71576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610a75565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260e9190614e6e565b90506001600160a01b03811661265f576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610a75565b6000612669612d1a565b905080516000146126fa57816001600160a01b031663355efdd961268c87612d9a565b61269587612d9a565b846040518463ffffffff1660e01b81526004016126b4939291906151a6565b602060405180830381865afa1580156126d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f59190614e9e565b61278a565b816001600160a01b031663ac41865a61271287612d9a565b61271b87612d9a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278a9190614e9e565b95945050505050565b60006127a0826020615193565b835110156127e75782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b50016020015190565b6127fa8282612dce565b61081b8585612e54565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161286157612861615106565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806128b15750816003145b806128bc5750816005145b806128c75750816007145b806128d25750816008145b806128dd575081600a145b806128e8575081600c145b156128f55750601f611008565b816002146129055750601e611008565b61290e83612e7c565b61291957601c61291c565b601d5b60ff169392505050565b60008181526001830160205260408120548015612a0f57600061294a600183614e8b565b855490915060009061295e90600190614e8b565b90508181146129c357600086600001828154811061297e5761297e614e29565b90600052602060002001549050808760000184815481106129a1576129a1614e29565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806129d4576129d46151d2565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611008565b6000915050611008565b5092915050565b6000818152600183016020526040812054612a6757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611008565b506000611008565b600054610100900460ff16612ac85760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051612ad390612eb8565b612adb612f88565b612ae88160200151612feb565b612af5816040015161304d565b612b0281606001516130af565b612b0f8160800151613111565b6119b48160a00151613173565b600054610100900460ff16612b755760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051612b809061153b565b612b8d8160200151611c7d565b612b9a8160400151611dfa565b60005b816060015151811015612c0857612bf682606001518281518110612bc357612bc3614e29565b60200260200101516000015183606001518381518110612be557612be5614e29565b602002602001015160200151611825565b80612c0081614e55565b915050612b9d565b5060005b81608001515181101561084b57612c6582608001518281518110612c3257612c32614e29565b60200260200101516000015183608001518381518110612c5457612c54614e29565b602002602001015160200151611eb5565b80612c6f81614e55565b915050612c0c565b60008282028315801590612c9a575082848281612c9657612c96615106565b0414155b15612cc257604051637472527d60e11b81526004810185905260248101849052604401610a75565b670de0b6b3a764000090049392505050565b612cde82826131d5565b612ce882826131df565b612cf28282613203565b612cfc82826132ef565b612d0682826134de565b612d108282613528565b61084b8282613615565b60606000612d2661372b565b905036811115612d4457505060408051600081526020810190915290565b8067ffffffffffffffff811115612d5d57612d5d6144f3565b6040519080825280601f01601f191660200182016040528015612d87576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614612dc65781611008565b611008613746565b6003541561084b576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015612e3857600080fd5b505af1158015612e4c573d6000803e3d6000fd5b505050505050565b612e5e82826137d2565b612e688282613874565b612e728282613896565b61084b8282613ad5565b6000612e896004836151e8565b158015612e9f5750612e9c6064836151e8565b15155b806110085750612eb1610190836151e8565b1592915050565b600054610100900460ff16612f115760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b612f7f81600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7a9190614e6e565b613b02565b6119bd81613b64565b600054610100900460ff16612fe15760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b612fe9613bf2565b565b600054610100900460ff166130445760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd81613c4b565b600054610100900460ff166130a65760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd81613cc0565b600054610100900460ff166131085760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd81613d35565b600054610100900460ff1661316a5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd81613de3565b600054610100900460ff166131cc5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd81613ec1565b61084b8282613f9f565b60045460ff161561084b5760405163181e462560e31b815260040160405180910390fd5b5a600555604080516080810182526006548082526007546020830152600854928201929092526009546060820152906000901580613242575081513a11155b9050806132875781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610a75565b602082015115610f7157600061329d483a614e8b565b602084015190915081111580612e4c5760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b600a54600b54600c54600e5460ff909316924282111561332b5760405163013ce60b60e01b815242600482015260248101839052604401610a75565b600084600281111561333f5761333f614d1d565b036133f8578260000361335457505050505050565b8060000361336e576133668342615193565b600d55612e4c565b600061337a8342614e8b565b90506000613388858361517f565b9050600061339686836150ef565b6133a09084614e8b565b9050838111156133cc5760405163013ce60b60e01b815242600482015260248101869052604401610a75565b856133d8836001615193565b6133e291906150ef565b6133ec9086615193565b600d5550612e4c915050565b814210158015613411575061340d8183615193565b4211155b15613420576133668284613ff2565b6000600185600281111561343657613436614d1d565b146134495761344442612149565b613452565b61345283612132565b90506000613460848361408a565b90508042101561348c5760405163013ce60b60e01b815242600482015260248101829052604401610a75565b60006134988483615193565b905042811080156134c55760405163013ce60b60e01b815242600482015260248101839052604401610a75565b6134cf8388613ff2565b600d5550505050505050505050565b6134e78261115b565b61084b576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610a75565b600061353383611bf2565b80519091506001600160a01b031661354a57505050565b6000836001600160a01b031682600001516001600160a01b0316146135865761358161357a858460000151611b59565b8490612c77565b613588565b825b90506000826020015182101580156135b05750604083015115806135b0575082604001518211155b90508061081b578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610a75565b600061362083611fab565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061366f57505050565b6000836001600160a01b031682600001516001600160a01b0316146136a45761369f61357a858460000151611b59565b6136a6565b825b90506000826080015142106136bc5760006136c2565b82604001515b6136cc9083615193565b9050826020015181111561081b57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610a75565b6000602436101561373c5750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa1580156137a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cd9190614e6e565b905090565b60006137dd83611fab565b80549091506001600160a01b03166137f457505050565b80546000906001600160a01b0385811691161461382a5781546138259061357a9086906001600160a01b0316611b59565b61382c565b825b9050816004015442106138555760006002830155600382015461384f9042615193565b60048301555b808260020160008282546138699190615193565b909155505050505050565b600d54600003613882575050565b61388d600d546140a9565b50506000600d55565b6005546000036138d2576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a60055461390b9190614e8b565b905060006139193a836150ef565b90506000836040015160001480613934575083604001518211155b90508061397e578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610a75929190918252602082015260400190565b60006005556060840151158015906139965750600085115b15612e4c576000613a69306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a029190614e6e565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a639190614e6e565b88611b59565b90506000613a778483611b65565b90506000613a8582896140de565b90508660600151811115610e4a5760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610a75918391600401918252602082015260400190565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff16613b5b5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd816141a7565b600054610100900460ff16613bbd5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051600180546001600160a01b0319166001600160a01b03909216919091179055602081015160408201516119bd9190611d21565b600054610100900460ff16612fe95760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600054610100900460ff16613ca45760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd8160000151826020015183604001518460600151611fdf565b600054610100900460ff16613d195760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd8160000151826020015183604001518460600151611282565b600054610100900460ff16613d8e5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051613d99906118f3565b60005b81602001515181101561084b57613dd182602001518281518110613dc257613dc2614e29565b602002602001015160016115e1565b80613ddb81614e55565b915050613d9c565b600054610100900460ff16613e3c5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051805160208201516040830151613e55929190611f4f565b60005b82602001515181101561093157600083602001518281518110613e7d57613e7d614e29565b60200260200101519050600081602001519050613eac82600001518260000151836020015184604001516116f4565b50508080613eb990614e55565b915050613e58565b600054610100900460ff16613f1a5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051805160208201516040830151613f33929190611da4565b60005b82602001515181101561093157600083602001518281518110613f5b57613f5b614e29565b60200260200101519050600081602001519050613f8a82600001518260000151836020015184604001516119c0565b50508080613f9790614e55565b915050613f36565b6002541561084b5760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612e1e565b60008060008061400186614240565b9194509250905060006140148684615193565b90506000614023600c836151e8565b90506000614032600c8461517f565b61403c9087615193565b905060006002600a5460ff16600281111561405957614059614d1d565b14614064578461406e565b61406e82846128a0565b905061407c8a83858461425f565b9a9950505050505050505050565b600080600061409842614240565b509150915061278a8583838761425f565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611945565b60008160000361411a576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361412a57506000611008565b670de0b6b3a76400008381029084828161414657614146615106565b0414614188576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610a75565b82600182038161419a5761419a615106565b0460010191505092915050565b600054610100900460ff166142005760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60008080614252620151808504612804565b9196909550909350915050565b600061278a84848461427089614287565b6142798a6142a5565b6142828b6142c1565b6142ce565b60008061429762015180846151e8565b9050610c2e610e108261517f565b6000806142b4610e10846151e8565b9050610c2e603c8261517f565b6000611008603c836151e8565b6000816142dc603c856150ef565b6142e8610e10876150ef565b620151806142f78b8b8b61432a565b61430191906150ef565b61430b9190615193565b6143159190615193565b61431f9190615193565b979650505050505050565b60006107b284101561433b57600080fd5b838383600062253d8c60046064600c614355600e886151fc565b61435f919061521c565b61436b8861132461524a565b614375919061524a565b61437f919061521c565b61438a906003615272565b614394919061521c565b600c806143a2600e886151fc565b6143ac919061521c565b6143b790600c615272565b6143c26002886151fc565b6143cc91906151fc565b6143d89061016f615272565b6143e2919061521c565b6004600c6143f1600e896151fc565b6143fb919061521c565b614407896112c061524a565b614411919061524a565b61441d906105b5615272565b614427919061521c565b614433617d4b876151fc565b61443d919061524a565b614447919061524a565b61445191906151fc565b61445b91906151fc565b98975050505050505050565b803560ff8116811461447857600080fd5b919050565b6000806000806080858703121561449357600080fd5b61449c85614467565b966020860135965060408601359560600135945092505050565b6001600160a01b03811681146119bd57600080fd5b8035614478816144b6565b6000602082840312156144e857600080fd5b8135610c2e816144b6565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561452c5761452c6144f3565b60405290565b6040516080810167ffffffffffffffff8111828210171561452c5761452c6144f3565b60405160c0810167ffffffffffffffff8111828210171561452c5761452c6144f3565b6040516020810167ffffffffffffffff8111828210171561452c5761452c6144f3565b604051601f8201601f1916810167ffffffffffffffff811182821017156145c4576145c46144f3565b604052919050565b600067ffffffffffffffff8211156145e6576145e66144f3565b5060051b60200190565b600082601f83011261460157600080fd5b81356020614616614611836145cc565b61459b565b82815260059290921b8401810191818101908684111561463557600080fd5b8286015b8481101561465957803561464c816144b6565b8352918301918301614639565b509695505050505050565b80151581146119bd57600080fd5b6000806040838503121561468557600080fd5b823567ffffffffffffffff8082111561469d57600080fd5b6146a9868387016145f0565b93506020915081850135818111156146c057600080fd5b85019050601f810186136146d357600080fd5b80356146e1614611826145cc565b81815260059190911b8201830190838101908883111561470057600080fd5b928401925b8284101561472757833561471881614664565b82529284019290840190614705565b80955050505050509250929050565b6000806000806080858703121561474c57600080fd5b8435614757816144b6565b93506020850135614767816144b6565b93969395505050506040820135916060013590565b6000806040838503121561478f57600080fd5b823561479a816144b6565b915060208301356147aa816144b6565b809150509250929050565b80356002811061447857600080fd5b6000602082840312156147d657600080fd5b610c2e826147b5565b600082601f8301126147f057600080fd5b81356020614800614611836145cc565b82815260069290921b8401810191818101908684111561481f57600080fd5b8286015b84811015614659576040818903121561483c5760008081fd5b614844614509565b813561484f816144b6565b81528185013561485e816144b6565b81860152835291830191604001614823565b600082601f83011261488157600080fd5b81356020614891614611836145cc565b82815260069290921b840181019181810190868411156148b057600080fd5b8286015b8481101561465957604081890312156148cd5760008081fd5b6148d5614509565b81356148e0816144b6565b815281850135858201528352918301916040016148b4565b60006060828403121561490a57600080fd5b6040516060810181811067ffffffffffffffff8211171561492d5761492d6144f3565b604052905080823561493e816144b6565b8082525060208301356020820152604083013560408201525092915050565b60006080828403121561496f57600080fd5b614977614532565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b6000608082840312156149b357600080fd5b6149bb614532565b90506149c682614467565b815260208201356020820152604082013560408201526060820135606082015292915050565b6000604082840312156149fe57600080fd5b614a06614509565b9050614a11826147b5565b8152602082013567ffffffffffffffff811115614a2d57600080fd5b614a39848285016145f0565b60208301525092915050565b600060808284031215614a5757600080fd5b614a5f614509565b90508135614a6c816144b6565b8152614a7b83602084016148f8565b602082015292915050565b60006080808385031215614a9957600080fd5b614aa1614509565b9150614aad84846148f8565b8252606083013567ffffffffffffffff811115614ac957600080fd5b8301601f81018513614ada57600080fd5b80356020614aea614611836145cc565b82815260079290921b83018101918181019088841115614b0957600080fd5b938201935b83851015614b2f57614b208986614a45565b82529385019390820190614b0e565b808388015250505050505092915050565b60006101c08284031215614b5357600080fd5b614b5b614555565b9050614b6783836148f8565b8152614b76836060840161495d565b6020820152614b888360e084016149a1565b604082015261016082013567ffffffffffffffff80821115614ba957600080fd5b614bb5858386016149ec565b6060840152610180840135915080821115614bcf57600080fd5b614bdb85838601614a86565b60808401526101a0840135915080821115614bf557600080fd5b50614c0284828501614a86565b60a08301525092915050565b600060208284031215614c2057600080fd5b813567ffffffffffffffff80821115614c3857600080fd5b9083019060208286031215614c4c57600080fd5b614c54614578565b823582811115614c6357600080fd5b929092019160c08387031215614c7857600080fd5b614c80614555565b614c89846144cb565b8152614c97602085016144cb565b602082015260408401356040820152606084013583811115614cb857600080fd5b614cc4888287016147df565b606083015250608084013583811115614cdc57600080fd5b614ce888828701614870565b60808301525060a084013583811115614d0057600080fd5b614d0c88828701614b40565b60a083015250815295945050505050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614d5557634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060608486031215614d7057600080fd5b8335614d7b816144b6565b95602085013595506040909401359392505050565b60008060408385031215614da357600080fd5b50508035926020909101359150565b600060208284031215614dc457600080fd5b5035919050565b60008060408385031215614dde57600080fd5b8235614de9816144b6565b946020939093013593505050565b60008060008060808587031215614e0d57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614e6757614e67614e3f565b5060010190565b600060208284031215614e8057600080fd5b8151610c2e816144b6565b8181038181111561100857611008614e3f565b600060208284031215614eb057600080fd5b5051919050565b600081518084526020808501945080840160005b83811015614ef05781516001600160a01b031687529582019590820190600101614ecb565b509495945050505050565b600060e082016001600160a01b03808b1684526020818b168186015289604086015288606086015287608086015260e060a0860152829150865180845261010086019250818801935060005b81811015614f6357845184529382019392820192600101614f47565b50505083810360c0850152614f788186614eb7565b9b9a5050505050505050505050565b60005b83811015614fa2578181015183820152602001614f8a565b50506000910152565b60008151808452614fc3816020860160208601614f87565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201526000611bd06040830184614fab565b60006020828403121561500b57600080fd5b815167ffffffffffffffff8082111561502357600080fd5b818401915084601f83011261503757600080fd5b815181811115615049576150496144f3565b61505c601f8201601f191660200161459b565b915080825285602082850101111561507357600080fd5b615084816020840160208601614f87565b50949350505050565b600081518084526020808501945080840160005b83811015614ef0578151875295820195908201906001016150a1565b6001600160a01b03841681526001600160e01b03198316602082015260606040820152600061278a606083018461508d565b808202811582820484141761100857611008614e3f565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b03198416604083015260806060830152615158608083018461508d565b9695505050505050565b60006020828403121561517457600080fd5b8151610c2e81614664565b60008261518e5761518e615106565b500490565b8082018082111561100857611008614e3f565b60006001600160a01b0380861683528085166020840152506060604083015261278a6060830184614fab565b634e487b7160e01b600052603160045260246000fd5b6000826151f7576151f7615106565b500690565b8181036000831280158383131683831282161715612a1957612a19614e3f565b60008261522b5761522b615106565b600160ff1b82146000198414161561524557615245614e3f565b500590565b808201828112600083128015821682158216171561526a5761526a614e3f565b505092915050565b80820260008212600160ff1b8414161561528e5761528e614e3f565b818105831482151761100857611008614e3f56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220355492b66f305b33ab637f124327f8e464cc891be5b80562027a58a49cc2727c64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c80636aacaad811610186578063a5900c4d116100e3578063d09edf3111610097578063d86483e111610071578063d86483e1146107b0578063e6b5be98146107c3578063f9eaee0d146107d657600080fd5b8063d09edf3114610771578063d3feb6021461078a578063d45a76cf1461079d57600080fd5b8063b96e422c116100c8578063b96e422c14610744578063c267621e1461074d578063c47590e41461075e57600080fd5b8063a5900c4d146106cd578063b187bd261461072757600080fd5b806390333ba81161013a578063a0c3774f1161011f578063a0c3774f14610674578063a2c4564414610687578063a33741771461069a57600080fd5b806390333ba8146106425780639eebe7cd1461065557600080fd5b806383f3084f1161016b57806383f3084f146106145780638456cb59146106275780638a5215861461062f57600080fd5b80636aacaad8146105b55780637125590a1461060157600080fd5b8063423a4b401161023f5780635064d83a116101f35780635ea54eee116101cd5780635ea54eee1461054d578063635600861461057957806363e133bc1461058c57600080fd5b80635064d83a146104e757806351a424b1146104fa5780635670e2ce1461053257600080fd5b8063445780991161022457806344578099146104745780634a45a3a81461049f5780634fd49efd146104d457600080fd5b8063423a4b401461044757806342d4693e1461045a57600080fd5b80632384c32d1161029657806330eae5721161027b57806330eae572146104195780633b191c971461042c5780633f4ba83a1461043f57600080fd5b80632384c32d146103f35780632be5f0c71461040657600080fd5b8063119a5e96116102c7578063119a5e961461030b578063219723841461033c578063221a8c681461034f57600080fd5b80630fe105e8146102e357806310188aef146102f8575b600080fd5b6102f66102f136600461447d565b6107e9565b005b6102f66103063660046144d6565b610822565b61031361084f565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6102f661034a366004614672565b610886565b6103c161035d3660046144d6565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610333565b6102f6610401366004614736565b610936565b6102f661041436600461477c565b610965565b6102f66104273660046147c4565b610990565b6102f661043a366004614c0e565b6109cd565b6102f6610af3565b6102f6610455366004614736565b610b7a565b600f546104679060ff1681565b6040516103339190614d33565b6104876104823660046144d6565b610ba9565b6040516001600160a01b039091168152602001610333565b6104c67f76456852b329dfb8372f4dbf77fd89fe3650d6ac874449ff011ea624b4c258b781565b604051908152602001610333565b600154610487906001600160a01b031681565b6102f66104f5366004614d5b565b610c35565b61050d6105083660046144d6565b610e55565b604080516001600160a01b039094168452602084019290925290820152606001610333565b60025460035460408051928352602083019190915201610333565b600654600754600854600954604080519485526020850193909352918301526060820152608001610333565b6102f66105873660046144d6565b610e7e565b61048761059a3660046144d6565b601f602052600090815260409020546001600160a01b031681565b6103c16040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102f661060f366004614d90565b610ea7565b601c54610487906001600160a01b031681565b6102f6610ed2565b601d54610487906001600160a01b031681565b6102f6610650366004614d5b565b610f44565b6104c66106633660046144d6565b602080526000908152604090205481565b6104c66106823660046144d6565b610f77565b6102f6610695366004614db2565b61100e565b61050d604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61050d6106db3660046144d6565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546107349060ff1681565b6040519015158152602001610333565b6104c6601e5481565b6001546001600160a01b0316610487565b6102f661076c366004614dcb565b611037565b600054610487906201000090046001600160a01b031681565b6102f6610798366004614d5b565b611062565b6103c16107ab3660046144d6565b61108f565b6104c66107be3660046144d6565b6110fe565b6102f66107d1366004614df7565b61112c565b6107346107e43660046144d6565b61115b565b6107f88460ff16848484611190565b61080f336000356001600160e01b0319168361123b565b61081b85858585611282565b5050505050565b61082b81611527565b610842336000356001600160e01b0319168361123b565b61084b8261153b565b5050565b600a5460009081908190819060ff16600281111561086f5761086f614d1d565b600b54600c54600e54935093509350935090919293565b61089c336000356001600160e01b0319166115c5565b80518251146108d7576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156109315761091f8382815181106108f8576108f8614e29565b602002602001015183838151811061091257610912614e29565b60200260200101516115e1565b8061092981614e55565b9150506108da565b505050565b6109428484848461168b565b610959336000356001600160e01b0319168361123b565b61081b858585856116f4565b61096f82826117ad565b610986336000356001600160e01b0319168361123b565b6109318383611825565b6109ad8160018111156109a5576109a5614d1d565b60ff166118ac565b6109c4336000356001600160e01b0319168361123b565b61084b826118f3565b600054610100900460ff16158080156109ed5750600054600160ff909116105b80610a075750303b158015610a07575060005460ff166001145b610a7e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610aa1576000805461ff0019166101001790555b610aaa82611950565b801561084b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610b09336000356001600160e01b0319166115c5565b60045460ff16610b45576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610b868484848461168b565b610b9d336000356001600160e01b0319168361123b565b61081b858585856119c0565b600080610bb583611a80565b90506001600160a01b03811615610bcc5792915050565b826001600160a01b0316634de046d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2e9190614e6e565b9392505050565b610c40838383611abc565b610c57336000356001600160e01b0319168361123b565b82600003610c6b57610c6884610f77565b92505b610c76848484611b4e565b6000610c8185610ba9565b90506000610c8f8683611b59565b90506000610cb8610ca886670de0b6b3a7640000614e8b565b610cb28885611b65565b90611b65565b9050600063be1b4c4960e01b888589858c6001600160a01b03166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190614e9e565b60408051600080825260208201908152818301909252610d5296959493929160648201614efb565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd92610dec9216908690600401614fd7565b6000604051808303816000875af1158015610e0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e339190810190614ff9565b9050610e4a89898988610e4586611bd8565b611be5565b505050505050505050565b600080600080610e6485611bf2565b805160208201516040909201519097919650945092505050565b610e8781611527565b610e9e336000356001600160e01b0319168361123b565b61084b82611c7d565b610eb18282611cc7565b610ec8336000356001600160e01b0319168361123b565b6109318383611d21565b610ee8336000356001600160e01b0319166115c5565b60045460ff1615610f0c5760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610f4f838383611abc565b610f66336000356001600160e01b0319168361123b565b610f71848484611da4565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110089190614e9e565b92915050565b611017816118ac565b61102e336000356001600160e01b0319168361123b565b61084b82611dfa565b6110418282611e58565b611058336000356001600160e01b0319168361123b565b6109318383611eb5565b61106d838383611abc565b611084336000356001600160e01b0319168361123b565b610f71848484611f4f565b6000806000806000806110a187611fab565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b038116600090815260208052604081205480156111225780610c2e565b601e549392505050565b61113884848484611190565b61114f336000356001600160e01b0319168361123b565b61081b85858585611fdf565b60008061116960108461207a565b90506001600f5460ff16600181111561118457611184614d1d565b14611008578015610c2e565b60408051600480825260a082019092526060916020820160808036833701905050905084816000815181106111c7576111c7614e29565b60200260200101818152505083816001815181106111e7576111e7614e29565b602002602001018181525050828160028151811061120757611207614e29565b602002602001018181525050818160038151811061122757611227614e29565b602002602001018181525050949350505050565b61124683838361209c565b610931578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610a75939291906150bd565b60ff84166113335760008111806112995750600082115b1561132e57826000036112cb5760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b8015806112d757508281115b1561130157604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b8160000361132e57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b611490565b826000036113605760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b80158061137857506113756224ea00846150ef565b81115b156113a257604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b816000036113cf57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60001960ff85160161141157601c6113e683612132565b111561132e57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60011960ff8516016114595761142682612149565b61142f83612132565b1461132e57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610a75565b8360ff1660028111156114a5576114a5614d1d565b600a805460ff191660018360028111156114c1576114c1614d1d565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060611008826001600160a01b03166118ac565b6001600160a01b03811661157b576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b60408051600081526020810190915261084b908390839061123b565b6001600160a01b038216611621576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806116365761163160108361216c565b611641565b611641601083612181565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c8260405161167f911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106116cb576116cb614e29565b602002602001018181525050836001600160a01b0316816001815181106111e7576111e7614e29565b6001600160a01b038416611734576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061175890848484612196565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b0316816000815181106117ea576117ea614e29565b602002602001018181525050816001600160a01b03168160018151811061181357611813614e29565b60200260200101818152505092915050565b6001600160a01b03821661184c57604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f7910161167f565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106118e2576118e2614e29565b602002602001018181525050919050565b600f805482919060ff19166001838181111561191157611911614d1d565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516119459190614d33565b60405180910390a150565b600054610100900460ff166119a95760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b80516119b490612266565b6119bd816122d5565b50565b6001600160a01b038416611a00576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611a249084848461232e565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611a72929190918252602082015260400190565b60405180910390a350505050565b6001600160a01b038082166000908152601f60205260408120549091168015611aa95780610c2e565b601d546001600160a01b03169392505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611afb57611afb614e29565b6020026020010181815250508281600181518110611b1b57611b1b614e29565b6020026020010181815250508181600281518110611b3b57611b3b614e29565b6020026020010181815250509392505050565b61093183838361248d565b6000610c2e8383612594565b60008282028315801590611b88575082848281611b8457611b84615106565b0414155b15611bb057604051637472527d60e11b81526004810185905260248101849052604401610a75565b8015611bcd57670de0b6b3a7640000600019820104600101611bd0565b60005b949350505050565b6000611008826000612793565b61081b85858585856127f0565b611c1f604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611c485780611c4b565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611cfe57611cfe614e29565b6020026020010181815250508160001c8160018151811061181357611813614e29565b8082148015611d2f57508115155b15611d69576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610a75565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b611db1601684848461232e565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611e235760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf890602001611945565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611e9557611e95614e29565b602002602001018181525050818160018151811061181357611813614e29565b6001600160a01b038216611edc57604051636070789160e11b815260040160405180910390fd5b670de0b6b3a7640000811115611f055760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed3910161167f565b611f5c6012848484612196565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b602052604081208054919290911615611fd65780610c2e565b60169392505050565b670de0b6b3a7640000811115612021576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d69190608001611519565b6001600160a01b03811660009081526001830160205260408120541515610c2e565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906120f190879030908890889060040161511c565b602060405180830381865afa15801561210e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd09190615162565b6000611bd0612144620151808461517f565b612804565b6000808061215d612144620151808661517f565b5091509150611bd082826128a0565b6000610c2e836001600160a01b038416612926565b6000610c2e836001600160a01b038416612a20565b60006001600160a01b0384161580156121ad575082155b80156121b7575081155b905060006001600160a01b038516158015906121db57508215806121db5750838310155b9050811580156121e9575080155b15612239576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff166122bf5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6122cc8160a00151612a6f565b6119bd81612b1c565b600054610100900460ff166119bd5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b60006001600160a01b038416158015612345575082155b801561234f575081155b905060006001600160a01b0385161580159061236b5750600084115b80156123775750600083115b905081158015612385575080155b156123d5576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b600386018390556001860184905581156123fc576000600287018190556004870155612468565b856004015460000361242357600060028701556124198342615193565b6004870155612468565b85546001600160a01b0386811691161461246857855460009061244f906001600160a01b031687611b59565b60028801549091506124619082612c77565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b6124978383612cd4565b6001600160a01b0383166124be57604051636070789160e11b815260040160405180910390fd5b816000036124f8576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061250384610ba9565b6001600160a01b031603612543576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061254e846110fe565b905080821115610f71576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610a75565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260e9190614e6e565b90506001600160a01b03811661265f576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610a75565b6000612669612d1a565b905080516000146126fa57816001600160a01b031663355efdd961268c87612d9a565b61269587612d9a565b846040518463ffffffff1660e01b81526004016126b4939291906151a6565b602060405180830381865afa1580156126d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f59190614e9e565b61278a565b816001600160a01b031663ac41865a61271287612d9a565b61271b87612d9a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278a9190614e9e565b95945050505050565b60006127a0826020615193565b835110156127e75782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b50016020015190565b6127fa8282612dce565b61081b8585612e54565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161286157612861615106565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806128b15750816003145b806128bc5750816005145b806128c75750816007145b806128d25750816008145b806128dd575081600a145b806128e8575081600c145b156128f55750601f611008565b816002146129055750601e611008565b61290e83612e7c565b61291957601c61291c565b601d5b60ff169392505050565b60008181526001830160205260408120548015612a0f57600061294a600183614e8b565b855490915060009061295e90600190614e8b565b90508181146129c357600086600001828154811061297e5761297e614e29565b90600052602060002001549050808760000184815481106129a1576129a1614e29565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806129d4576129d46151d2565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611008565b6000915050611008565b5092915050565b6000818152600183016020526040812054612a6757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611008565b506000611008565b600054610100900460ff16612ac85760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051612ad390612eb8565b612adb612f88565b612ae88160200151612feb565b612af5816040015161304d565b612b0281606001516130af565b612b0f8160800151613111565b6119b48160a00151613173565b600054610100900460ff16612b755760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051612b809061153b565b612b8d8160200151611c7d565b612b9a8160400151611dfa565b60005b816060015151811015612c0857612bf682606001518281518110612bc357612bc3614e29565b60200260200101516000015183606001518381518110612be557612be5614e29565b602002602001015160200151611825565b80612c0081614e55565b915050612b9d565b5060005b81608001515181101561084b57612c6582608001518281518110612c3257612c32614e29565b60200260200101516000015183608001518381518110612c5457612c54614e29565b602002602001015160200151611eb5565b80612c6f81614e55565b915050612c0c565b60008282028315801590612c9a575082848281612c9657612c96615106565b0414155b15612cc257604051637472527d60e11b81526004810185905260248101849052604401610a75565b670de0b6b3a764000090049392505050565b612cde82826131d5565b612ce882826131df565b612cf28282613203565b612cfc82826132ef565b612d0682826134de565b612d108282613528565b61084b8282613615565b60606000612d2661372b565b905036811115612d4457505060408051600081526020810190915290565b8067ffffffffffffffff811115612d5d57612d5d6144f3565b6040519080825280601f01601f191660200182016040528015612d87576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614612dc65781611008565b611008613746565b6003541561084b576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015612e3857600080fd5b505af1158015612e4c573d6000803e3d6000fd5b505050505050565b612e5e82826137d2565b612e688282613874565b612e728282613896565b61084b8282613ad5565b6000612e896004836151e8565b158015612e9f5750612e9c6064836151e8565b15155b806110085750612eb1610190836151e8565b1592915050565b600054610100900460ff16612f115760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b612f7f81600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7a9190614e6e565b613b02565b6119bd81613b64565b600054610100900460ff16612fe15760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b612fe9613bf2565b565b600054610100900460ff166130445760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd81613c4b565b600054610100900460ff166130a65760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd81613cc0565b600054610100900460ff166131085760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd81613d35565b600054610100900460ff1661316a5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd81613de3565b600054610100900460ff166131cc5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd81613ec1565b61084b8282613f9f565b60045460ff161561084b5760405163181e462560e31b815260040160405180910390fd5b5a600555604080516080810182526006548082526007546020830152600854928201929092526009546060820152906000901580613242575081513a11155b9050806132875781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610a75565b602082015115610f7157600061329d483a614e8b565b602084015190915081111580612e4c5760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b600a54600b54600c54600e5460ff909316924282111561332b5760405163013ce60b60e01b815242600482015260248101839052604401610a75565b600084600281111561333f5761333f614d1d565b036133f8578260000361335457505050505050565b8060000361336e576133668342615193565b600d55612e4c565b600061337a8342614e8b565b90506000613388858361517f565b9050600061339686836150ef565b6133a09084614e8b565b9050838111156133cc5760405163013ce60b60e01b815242600482015260248101869052604401610a75565b856133d8836001615193565b6133e291906150ef565b6133ec9086615193565b600d5550612e4c915050565b814210158015613411575061340d8183615193565b4211155b15613420576133668284613ff2565b6000600185600281111561343657613436614d1d565b146134495761344442612149565b613452565b61345283612132565b90506000613460848361408a565b90508042101561348c5760405163013ce60b60e01b815242600482015260248101829052604401610a75565b60006134988483615193565b905042811080156134c55760405163013ce60b60e01b815242600482015260248101839052604401610a75565b6134cf8388613ff2565b600d5550505050505050505050565b6134e78261115b565b61084b576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610a75565b600061353383611bf2565b80519091506001600160a01b031661354a57505050565b6000836001600160a01b031682600001516001600160a01b0316146135865761358161357a858460000151611b59565b8490612c77565b613588565b825b90506000826020015182101580156135b05750604083015115806135b0575082604001518211155b90508061081b578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610a75565b600061362083611fab565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061366f57505050565b6000836001600160a01b031682600001516001600160a01b0316146136a45761369f61357a858460000151611b59565b6136a6565b825b90506000826080015142106136bc5760006136c2565b82604001515b6136cc9083615193565b9050826020015181111561081b57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610a75565b6000602436101561373c5750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa1580156137a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cd9190614e6e565b905090565b60006137dd83611fab565b80549091506001600160a01b03166137f457505050565b80546000906001600160a01b0385811691161461382a5781546138259061357a9086906001600160a01b0316611b59565b61382c565b825b9050816004015442106138555760006002830155600382015461384f9042615193565b60048301555b808260020160008282546138699190615193565b909155505050505050565b600d54600003613882575050565b61388d600d546140a9565b50506000600d55565b6005546000036138d2576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a60055461390b9190614e8b565b905060006139193a836150ef565b90506000836040015160001480613934575083604001518211155b90508061397e578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610a75929190918252602082015260400190565b60006005556060840151158015906139965750600085115b15612e4c576000613a69306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a029190614e6e565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a639190614e6e565b88611b59565b90506000613a778483611b65565b90506000613a8582896140de565b90508660600151811115610e4a5760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610a75918391600401918252602082015260400190565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff16613b5b5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd816141a7565b600054610100900460ff16613bbd5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051600180546001600160a01b0319166001600160a01b03909216919091179055602081015160408201516119bd9190611d21565b600054610100900460ff16612fe95760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600054610100900460ff16613ca45760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd8160000151826020015183604001518460600151611fdf565b600054610100900460ff16613d195760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6119bd8160000151826020015183604001518460600151611282565b600054610100900460ff16613d8e5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051613d99906118f3565b60005b81602001515181101561084b57613dd182602001518281518110613dc257613dc2614e29565b602002602001015160016115e1565b80613ddb81614e55565b915050613d9c565b600054610100900460ff16613e3c5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051805160208201516040830151613e55929190611f4f565b60005b82602001515181101561093157600083602001518281518110613e7d57613e7d614e29565b60200260200101519050600081602001519050613eac82600001518260000151836020015184604001516116f4565b50508080613eb990614e55565b915050613e58565b600054610100900460ff16613f1a5760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051805160208201516040830151613f33929190611da4565b60005b82602001515181101561093157600083602001518281518110613f5b57613f5b614e29565b60200260200101519050600081602001519050613f8a82600001518260000151836020015184604001516119c0565b50508080613f9790614e55565b915050613f36565b6002541561084b5760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612e1e565b60008060008061400186614240565b9194509250905060006140148684615193565b90506000614023600c836151e8565b90506000614032600c8461517f565b61403c9087615193565b905060006002600a5460ff16600281111561405957614059614d1d565b14614064578461406e565b61406e82846128a0565b905061407c8a83858461425f565b9a9950505050505050505050565b600080600061409842614240565b509150915061278a8583838761425f565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611945565b60008160000361411a576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361412a57506000611008565b670de0b6b3a76400008381029084828161414657614146615106565b0414614188576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610a75565b82600182038161419a5761419a615106565b0460010191505092915050565b600054610100900460ff166142005760405162461bcd60e51b815260206004820152602b60248201526000805160206152a383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60008080614252620151808504612804565b9196909550909350915050565b600061278a84848461427089614287565b6142798a6142a5565b6142828b6142c1565b6142ce565b60008061429762015180846151e8565b9050610c2e610e108261517f565b6000806142b4610e10846151e8565b9050610c2e603c8261517f565b6000611008603c836151e8565b6000816142dc603c856150ef565b6142e8610e10876150ef565b620151806142f78b8b8b61432a565b61430191906150ef565b61430b9190615193565b6143159190615193565b61431f9190615193565b979650505050505050565b60006107b284101561433b57600080fd5b838383600062253d8c60046064600c614355600e886151fc565b61435f919061521c565b61436b8861132461524a565b614375919061524a565b61437f919061521c565b61438a906003615272565b614394919061521c565b600c806143a2600e886151fc565b6143ac919061521c565b6143b790600c615272565b6143c26002886151fc565b6143cc91906151fc565b6143d89061016f615272565b6143e2919061521c565b6004600c6143f1600e896151fc565b6143fb919061521c565b614407896112c061524a565b614411919061524a565b61441d906105b5615272565b614427919061521c565b614433617d4b876151fc565b61443d919061524a565b614447919061524a565b61445191906151fc565b61445b91906151fc565b98975050505050505050565b803560ff8116811461447857600080fd5b919050565b6000806000806080858703121561449357600080fd5b61449c85614467565b966020860135965060408601359560600135945092505050565b6001600160a01b03811681146119bd57600080fd5b8035614478816144b6565b6000602082840312156144e857600080fd5b8135610c2e816144b6565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561452c5761452c6144f3565b60405290565b6040516080810167ffffffffffffffff8111828210171561452c5761452c6144f3565b60405160c0810167ffffffffffffffff8111828210171561452c5761452c6144f3565b6040516020810167ffffffffffffffff8111828210171561452c5761452c6144f3565b604051601f8201601f1916810167ffffffffffffffff811182821017156145c4576145c46144f3565b604052919050565b600067ffffffffffffffff8211156145e6576145e66144f3565b5060051b60200190565b600082601f83011261460157600080fd5b81356020614616614611836145cc565b61459b565b82815260059290921b8401810191818101908684111561463557600080fd5b8286015b8481101561465957803561464c816144b6565b8352918301918301614639565b509695505050505050565b80151581146119bd57600080fd5b6000806040838503121561468557600080fd5b823567ffffffffffffffff8082111561469d57600080fd5b6146a9868387016145f0565b93506020915081850135818111156146c057600080fd5b85019050601f810186136146d357600080fd5b80356146e1614611826145cc565b81815260059190911b8201830190838101908883111561470057600080fd5b928401925b8284101561472757833561471881614664565b82529284019290840190614705565b80955050505050509250929050565b6000806000806080858703121561474c57600080fd5b8435614757816144b6565b93506020850135614767816144b6565b93969395505050506040820135916060013590565b6000806040838503121561478f57600080fd5b823561479a816144b6565b915060208301356147aa816144b6565b809150509250929050565b80356002811061447857600080fd5b6000602082840312156147d657600080fd5b610c2e826147b5565b600082601f8301126147f057600080fd5b81356020614800614611836145cc565b82815260069290921b8401810191818101908684111561481f57600080fd5b8286015b84811015614659576040818903121561483c5760008081fd5b614844614509565b813561484f816144b6565b81528185013561485e816144b6565b81860152835291830191604001614823565b600082601f83011261488157600080fd5b81356020614891614611836145cc565b82815260069290921b840181019181810190868411156148b057600080fd5b8286015b8481101561465957604081890312156148cd5760008081fd5b6148d5614509565b81356148e0816144b6565b815281850135858201528352918301916040016148b4565b60006060828403121561490a57600080fd5b6040516060810181811067ffffffffffffffff8211171561492d5761492d6144f3565b604052905080823561493e816144b6565b8082525060208301356020820152604083013560408201525092915050565b60006080828403121561496f57600080fd5b614977614532565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b6000608082840312156149b357600080fd5b6149bb614532565b90506149c682614467565b815260208201356020820152604082013560408201526060820135606082015292915050565b6000604082840312156149fe57600080fd5b614a06614509565b9050614a11826147b5565b8152602082013567ffffffffffffffff811115614a2d57600080fd5b614a39848285016145f0565b60208301525092915050565b600060808284031215614a5757600080fd5b614a5f614509565b90508135614a6c816144b6565b8152614a7b83602084016148f8565b602082015292915050565b60006080808385031215614a9957600080fd5b614aa1614509565b9150614aad84846148f8565b8252606083013567ffffffffffffffff811115614ac957600080fd5b8301601f81018513614ada57600080fd5b80356020614aea614611836145cc565b82815260079290921b83018101918181019088841115614b0957600080fd5b938201935b83851015614b2f57614b208986614a45565b82529385019390820190614b0e565b808388015250505050505092915050565b60006101c08284031215614b5357600080fd5b614b5b614555565b9050614b6783836148f8565b8152614b76836060840161495d565b6020820152614b888360e084016149a1565b604082015261016082013567ffffffffffffffff80821115614ba957600080fd5b614bb5858386016149ec565b6060840152610180840135915080821115614bcf57600080fd5b614bdb85838601614a86565b60808401526101a0840135915080821115614bf557600080fd5b50614c0284828501614a86565b60a08301525092915050565b600060208284031215614c2057600080fd5b813567ffffffffffffffff80821115614c3857600080fd5b9083019060208286031215614c4c57600080fd5b614c54614578565b823582811115614c6357600080fd5b929092019160c08387031215614c7857600080fd5b614c80614555565b614c89846144cb565b8152614c97602085016144cb565b602082015260408401356040820152606084013583811115614cb857600080fd5b614cc4888287016147df565b606083015250608084013583811115614cdc57600080fd5b614ce888828701614870565b60808301525060a084013583811115614d0057600080fd5b614d0c88828701614b40565b60a083015250815295945050505050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614d5557634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060608486031215614d7057600080fd5b8335614d7b816144b6565b95602085013595506040909401359392505050565b60008060408385031215614da357600080fd5b50508035926020909101359150565b600060208284031215614dc457600080fd5b5035919050565b60008060408385031215614dde57600080fd5b8235614de9816144b6565b946020939093013593505050565b60008060008060808587031215614e0d57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614e6757614e67614e3f565b5060010190565b600060208284031215614e8057600080fd5b8151610c2e816144b6565b8181038181111561100857611008614e3f565b600060208284031215614eb057600080fd5b5051919050565b600081518084526020808501945080840160005b83811015614ef05781516001600160a01b031687529582019590820190600101614ecb565b509495945050505050565b600060e082016001600160a01b03808b1684526020818b168186015289604086015288606086015287608086015260e060a0860152829150865180845261010086019250818801935060005b81811015614f6357845184529382019392820192600101614f47565b50505083810360c0850152614f788186614eb7565b9b9a5050505050505050505050565b60005b83811015614fa2578181015183820152602001614f8a565b50506000910152565b60008151808452614fc3816020860160208601614f87565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201526000611bd06040830184614fab565b60006020828403121561500b57600080fd5b815167ffffffffffffffff8082111561502357600080fd5b818401915084601f83011261503757600080fd5b815181811115615049576150496144f3565b61505c601f8201601f191660200161459b565b915080825285602082850101111561507357600080fd5b615084816020840160208601614f87565b50949350505050565b600081518084526020808501945080840160005b83811015614ef0578151875295820195908201906001016150a1565b6001600160a01b03841681526001600160e01b03198316602082015260606040820152600061278a606083018461508d565b808202811582820484141761100857611008614e3f565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b03198416604083015260806060830152615158608083018461508d565b9695505050505050565b60006020828403121561517457600080fd5b8151610c2e81614664565b60008261518e5761518e615106565b500490565b8082018082111561100857611008614e3f565b60006001600160a01b0380861683528085166020840152506060604083015261278a6060830184614fab565b634e487b7160e01b600052603160045260246000fd5b6000826151f7576151f7615106565b500690565b8181036000831280158383131683831282161715612a1957612a19614e3f565b60008261522b5761522b615106565b600160ff1b82146000198414161561524557615245614e3f565b500590565b808201828112600083128015821682158216171561526a5761526a614e3f565b505092915050565b80820260008212600160ff1b8414161561528e5761528e614e3f565b818105831482151761100857611008614e3f56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220355492b66f305b33ab637f124327f8e464cc891be5b80562027a58a49cc2727c64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
