{
  "_format": "hh-sol-artifact-1",
  "contractName": "WormholeBridger",
  "sourceName": "contracts/bridge/WormholeBridger.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": "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": [
        {
          "internalType": "uint256",
          "name": "destinationChain",
          "type": "uint256"
        }
      ],
      "name": "TaskBridgeCurrentChainId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskConnectorZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskDestinationChainNotSet",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxFee",
          "type": "uint256"
        }
      ],
      "name": "TaskFeeAboveMax",
      "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": [],
      "name": "TaskInvalidMaxFee",
      "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": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "TaskNextConnectorNotZero",
      "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": [],
      "name": "TaskRecipientZero",
      "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": [
        {
          "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": true,
          "internalType": "uint256",
          "name": "destinationChain",
          "type": "uint256"
        }
      ],
      "name": "CustomDestinationChainSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "CustomMaxFeeSet",
      "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": "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": true,
          "internalType": "uint256",
          "name": "defaultDestinationChain",
          "type": "uint256"
        }
      ],
      "name": "DefaultDestinationChainSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "DefaultMaxFeeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "DefaultMaxSlippageSet",
      "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": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "RecipientSet",
      "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": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "fee",
          "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": "customDestinationChain",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "customMaxFee",
      "outputs": [
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "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": "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": "defaultDestinationChain",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultMaxFee",
      "outputs": [
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getDestinationChain",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": "getMaxFee",
      "outputs": [
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "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": "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": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "destinationChain",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "maxSlippage",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BaseBridgeTask.MaxFee",
                  "name": "maxFee",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "destinationChain",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BaseBridgeTask.CustomDestinationChain[]",
                  "name": "customDestinationChains",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "maxSlippage",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BaseBridgeTask.CustomMaxSlippage[]",
                  "name": "customMaxSlippages",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "address",
                          "name": "token",
                          "type": "address"
                        },
                        {
                          "internalType": "uint256",
                          "name": "amount",
                          "type": "uint256"
                        }
                      ],
                      "internalType": "struct BaseBridgeTask.MaxFee",
                      "name": "maxFee",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct BaseBridgeTask.CustomMaxFee[]",
                  "name": "customMaxFees",
                  "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 BaseBridgeTask.BaseBridgeConfig",
              "name": "baseBridgeConfig",
              "type": "tuple"
            }
          ],
          "internalType": "struct WormholeBridger.WormholeBridgeConfig",
          "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": [],
      "name": "recipient",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "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": "destinationChain",
          "type": "uint256"
        }
      ],
      "name": "setCustomDestinationChain",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "setCustomMaxFee",
      "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": "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": "destinationChain",
          "type": "uint256"
        }
      ],
      "name": "setDefaultDestinationChain",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "maxFeeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "setDefaultMaxFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "setDefaultMaxSlippage",
      "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": "address",
          "name": "newRecipient",
          "type": "address"
        }
      ],
      "name": "setRecipient",
      "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": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6156c180620000f36000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80637a2f57d0116101b2578063bb3084f6116100f9578063d09edf31116100a2578063d86483e11161007c578063d86483e1146108b3578063e6b5be98146108c6578063eb19ca8b146108d9578063f9eaee0d1461090257600080fd5b8063d09edf3114610874578063d3feb6021461088d578063d45a76cf146108a057600080fd5b8063c31163be116100d3578063c31163be1461082e578063c47590e414610841578063ce11b4181461085457600080fd5b8063bb3084f6146107f7578063bf5d9eab1461080a578063c267621e1461081d57600080fd5b8063a2c456441161015b578063b07addf611610135578063b07addf6146107c8578063b187bd26146107d1578063b96e422c146107ee57600080fd5b8063a2c4564414610728578063a33741771461073b578063a5900c4d1461076e57600080fd5b806390333ba81161018c57806390333ba8146106e25780639eebe7cd146106f5578063a0c3774f1461071557600080fd5b80637a2f57d01461067d57806383f3084f146106c75780638456cb59146106da57600080fd5b8063468534c2116102765780635ea54eee1161021f5780636aacaad8116101f95780636aacaad81461060b5780637125590a146106575780637196f8e91461066a57600080fd5b80635ea54eee1461059a57806360f5dfda146105c657806366d003ac146105f857600080fd5b80635064d83a116102505780635064d83a1461053457806351a424b1146105475780635670e2ce1461057f57600080fd5b8063468534c2146104c15780634a45a3a8146104d45780634fd49efd1461050957600080fd5b806323a6e376116102d85780633f4ba83a116102b25780633f4ba83a1461048c578063423a4b401461049457806342d4693e146104a757600080fd5b806323a6e3761461045357806330eae572146104665780633bbed4a01461047957600080fd5b806321972384116103095780632197238414610389578063221a8c681461039c5780632384c32d1461044057600080fd5b80630fe105e81461033057806310188aef14610345578063119a5e9614610358575b600080fd5b61034361033e366004614878565b610915565b005b6103436103533660046148d1565b61094e565b61036061097b565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b610343610397366004614a91565b6109b2565b61040e6103aa3660046148d1565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610380565b61034361044e366004614b55565b610a62565b610343610461366004614ffa565b610a91565b61034361047436600461514f565b610bb7565b6103436104873660046148d1565b610bf4565b610343610c1d565b6103436104a2366004614b55565b610ca4565b600f546104b49060ff1681565b6040516103809190615180565b6103436104cf3660046151a8565b610cd3565b6104fb7f6ee2f653a7d33776e55e4b2dcd8474d17d7af5b57d625d6ff223ec68702c6d5281565b604051908152602001610380565b60015461051c906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b6103436105423660046151e9565b610d06565b61055a6105553660046148d1565b610eab565b604080516001600160a01b039094168452602084019290925290820152606001610380565b60025460035460408051928352602083019190915201610380565b600654600754600854600954604080519485526020850193909352918301526060820152608001610380565b6105d96105d43660046148d1565b610ed4565b604080516001600160a01b039093168352602083019190915201610380565b601d5461051c906001600160a01b031681565b61040e6040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b61034361066536600461521e565b610ef5565b610343610678366004615240565b610f20565b6105d961068b3660046148d1565b6001600160a01b039081166000908152602460209081526040918290208251808401909352805490931680835260019093015491018190529091565b601c5461051c906001600160a01b031681565b610343610f4b565b6103436106f03660046151e9565b610fbd565b6104fb6107033660046148d1565b60236020526000908152604090205481565b6104fb6107233660046148d1565b610fea565b61034361073636600461526c565b611081565b61055a604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61055a61077c3660046148d1565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6104fb601e5481565b6004546107de9060ff1681565b6040519015158152602001610380565b6104fb601f5481565b6104fb6108053660046148d1565b6110aa565b61034361081836600461526c565b6110da565b6001546001600160a01b031661051c565b61034361083c366004615240565b611103565b61034361084f366004615240565b61112e565b6104fb6108623660046148d1565b60226020526000908152604090205481565b60005461051c906201000090046001600160a01b031681565b61034361089b3660046151e9565b611159565b61040e6108ae3660046148d1565b611186565b6104fb6108c13660046148d1565b6111f5565b6103436108d4366004615285565b611224565b60408051808201909152602080546001600160a01b0316808352602154919092018190526105d9565b6107de6109103660046148d1565b611253565b6109248460ff16848484611295565b61093b336000356001600160e01b03191683611340565b61094785858585611387565b5050505050565b6109578161162c565b61096e336000356001600160e01b03191683611340565b61097782611640565b5050565b600a5460009081908190819060ff16600281111561099b5761099b61516a565b600b54600c54600e54935093509350935090919293565b6109c8336000356001600160e01b0319166116ca565b8051825114610a03576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610a5d57610a4b838281518110610a2457610a246152b7565b6020026020010151838381518110610a3e57610a3e6152b7565b60200260200101516116e6565b80610a55816152e3565b915050610a06565b505050565b610a6e84848484611790565b610a85336000356001600160e01b03191683611340565b610947858585856117f9565b600054610100900460ff1615808015610ab15750600054600160ff909116105b80610acb5750303b158015610acb575060005460ff166001145b610b425760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610b65576000805461ff0019166101001790555b610b6e826118b2565b8015610977576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610bd4816001811115610bcc57610bcc61516a565b60ff16611922565b610beb336000356001600160e01b03191683611340565b61097782611969565b610bfd8161162c565b610c14336000356001600160e01b03191683611340565b610977826119c6565b610c33336000356001600160e01b0319166116ca565b60045460ff16610c6f576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610cb084848484611790565b610cc7336000356001600160e01b03191683611340565b61094785858585611a50565b610cde838383611b10565b610cf5336000356001600160e01b03191683611340565b610d00848484611bab565b50505050565b610d11838383611c47565b610d28336000356001600160e01b03191683611340565b82600003610d3c57610d3984610fea565b92505b610d47848484611ca6565b6000610d5383856152fc565b905060007fa0ec605300000000000000000000000000000000000000000000000000000000610d81876110aa565b601d5460405160248101929092526001600160a01b03808a16604484015260648301899052608483018690521660a482015260c40160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506001600160a01b0390811692631cff79cd92610e50929190911690859060040161535f565b6000604051808303816000875af1158015610e6f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e979190810190615381565b50610ea3868686611cb3565b505050505050565b600080600080610eba85611cc0565b805160208201516040909201519097919650945092505050565b6000806000610ee284611d4b565b8051602090910151909590945092505050565b610eff8282611dc5565b610f16336000356001600160e01b03191683611340565b610a5d8383611e31565b610f2a8282611e76565b610f41336000356001600160e01b03191683611340565b610a5d8383611ed3565b610f61336000356001600160e01b0319166116ca565b60045460ff1615610f855760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610fc8838383611c47565b610fdf336000356001600160e01b03191683611340565b610d00848484611f1a565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015611057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107b9190615415565b92915050565b61108a81611922565b6110a1336000356001600160e01b03191683611340565b61097782611f70565b6001600160a01b03811660009081526022602052604081205480156110cf57806110d3565b601e545b9392505050565b6110e381611922565b6110fa336000356001600160e01b03191683611340565b61097782611fce565b61110d8282611e76565b611124336000356001600160e01b03191683611340565b610a5d8383612024565b6111388282611e76565b61114f336000356001600160e01b03191683611340565b610a5d83836120b5565b611164838383611c47565b61117b336000356001600160e01b03191683611340565b610d00848484612152565b600080600080600080611198876121ae565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b038116600090815260236020526040812054801561121a57806110d3565b601f549392505050565b61123084848484611295565b611247336000356001600160e01b03191683611340565b610947858585856121e2565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff16818111156112895761128961516a565b1461107b5780156110d3565b60408051600480825260a082019092526060916020820160808036833701905050905084816000815181106112cc576112cc6152b7565b60200260200101818152505083816001815181106112ec576112ec6152b7565b602002602001018181525050828160028151811061130c5761130c6152b7565b602002602001018181525050818160038151811061132c5761132c6152b7565b602002602001018181525050949350505050565b61134b83838361227d565b610a5d578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610b3993929190615469565b60ff841661143857600081118061139e5750600082115b1561143357826000036113d05760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b39565b8015806113dc57508281115b1561140657604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b39565b8160000361143357604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b611595565b826000036114655760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b39565b80158061147d575061147a6224ea008461549b565b81115b156114a757604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b39565b816000036114d457604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b60001960ff85160161151657601c6114eb8361231b565b111561143357604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b60011960ff85160161155e5761152b82612332565b6115348361231b565b1461143357604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610b39565b8360ff1660028111156115aa576115aa61516a565b600a805460ff191660018360028111156115c6576115c661516a565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b606061107b826001600160a01b0316611922565b6001600160a01b038116611680576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b6040805160008152602081019091526109779083908390611340565b6001600160a01b038216611726576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061173b57611736601083612355565b611746565b61174660108361236a565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611784911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106117d0576117d06152b7565b602002602001018181525050836001600160a01b0316816001815181106112ec576112ec6152b7565b6001600160a01b038416611839576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061185d9084848461237f565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b600054610100900460ff1661190b5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b80516119169061244f565b61191f816124bf565b50565b604080516001808252818301909252606091602080830190803683370190505090508181600081518110611958576119586152b7565b602002602001018181525050919050565b600f805482919060ff1916600183818111156119875761198761516a565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516119bb9190615180565b60405180910390a150565b6001600160a01b038116611a06576040517f2586ae9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383169081179091556040517f9d900d71c28433348acb1bec780a061608a96b149370abce77fd54ba2d47940190600090a250565b6001600160a01b038416611a90576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611ab490848484612518565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611b02929190918252602082015260400190565b60405180910390a350505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611b4f57611b4f6152b7565b602002602001018181525050826001600160a01b031681600181518110611b7857611b786152b7565b6020026020010181815250508181600281518110611b9857611b986152b7565b6020026020010181815250509392505050565b6001600160a01b038316611bd257604051636070789160e11b815260040160405180910390fd5b6001600160a01b0383166000908152602460205260409020611bf5908383612677565b816001600160a01b0316836001600160a01b03167fc4fdf80c1c19c6c15745294372240e0b830511ef069d2fe082f76e6ac663cd7683604051611c3a91815260200190565b60405180910390a3505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611c8657611c866152b7565b6020026020010181815250508281600181518110611b7857611b786152b7565b610a5d83836000846126ea565b610a5d83836000846128ba565b611ced604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611d165780611d19565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b604080518082018252600080825260208083018290526001600160a01b0385811683526024825291849020845180860190955280549092168085526001909201549084015290919015611d9e57806110d3565b60408051808201909152602080546001600160a01b03168252602154908201529392505050565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611dfc57611dfc6152b7565b6020026020010181815250508160001c81600181518110611e1f57611e1f6152b7565b60200260200101818152505092915050565b8015611e6c576040517f9842f26f00000000000000000000000000000000000000000000000000000000815260048101829052602401610b39565b61097782826128c4565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611eb357611eb36152b7565b6020026020010181815250508181600181518110611e1f57611e1f6152b7565b611edf60208383612677565b816001600160a01b03167f145629ab5475088f72def3b209864cc49abc02a2f230e887ad1f61629bc5dbaf8260405161178491815260200190565b611f276016848484612518565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611f995760405163c2b0b62d60e01b815260040160405180910390fd5b601f8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf8906020016119bb565b468103611ff15760405163499ff75560e01b815260048101829052602401610b39565b601e81905560405181907f972b12d97bdf2afd537325c7e5db7c15141bb5a7e7f5a65b76f3c2b4f651991090600090a250565b6001600160a01b03821661204b57604051636070789160e11b815260040160405180910390fd5b46810361206e5760405163499ff75560e01b815260048101829052602401610b39565b6001600160a01b038216600081815260226020526040808220849055518392917ffef363cd40fa337ea6f51a9c42c6dbb8225c1c93c2dea4384bf58ca8a257aa9691a35050565b6001600160a01b0382166120dc57604051636070789160e11b815260040160405180910390fd5b670de0b6b3a76400008111156121055760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b03821660008181526023602052604090819020839055517f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed3906117849084815260200190565b61215f601284848461237f565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b6020526040812080549192909116156121d957806110d3565b60169392505050565b670de0b6b3a7640000811115612224576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d6919060800161161e565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906122d29087903090889088906004016154b2565b602060405180830381865afa1580156122ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231391906154f8565b949350505050565b600061231361232d620151808461552b565b612947565b6000808061234661232d620151808661552b565b509150915061231382826129e3565b60006110d3836001600160a01b038416612a69565b60006110d3836001600160a01b038416612b63565b60006001600160a01b038416158015612396575082155b80156123a0575081155b905060006001600160a01b038516158015906123c457508215806123c45750838310155b9050811580156123d2575080155b15612422576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b39565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff166124a85760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6124b6816101000151612bb2565b61191f81612c5f565b600054610100900460ff1661191f5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b60006001600160a01b03841615801561252f575082155b8015612539575081155b905060006001600160a01b038516158015906125555750600084115b80156125615750600083115b90508115801561256f575080155b156125bf576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b39565b600386018390556001860184905581156125e6576000600287018190556004870155612652565b856004015460000361260d5760006002870155612603834261553f565b6004870155612652565b85546001600160a01b03868116911614612652578554600090612639906001600160a01b031687612e2e565b600288015490915061264b9082612e3a565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b6001600160a01b03821615801561268d57508015155b156126c4576040517f3d2584f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82546001600160a01b0319166001600160a01b0392909216919091178255600190910155565b6126f48484612e97565b6001600160a01b03841661271b57604051636070789160e11b815260040160405180910390fd5b82600003612755576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61275e846110aa565b600003612797576040517fa9b1d14100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006127a2856111f5565b9050808311156127e8576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610b39565b816000036127f65750610d00565b600061280186611d4b565b80519091506001600160a01b031661283c5760208101516040516303b27ef760e01b8152610b39918591600401918252602082015260400190565b6000866001600160a01b031682600001516001600160a01b0316146128785761287361286c888460000151612e2e565b8590612e3a565b61287a565b835b905081602001518111156128b15760208201516040516303b27ef760e01b8152610b39918391600401918252602082015260400190565b50505050505050565b610d008484612edd565b80821480156128d257508115155b1561290c576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610b39565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816129a4576129a4615515565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806129f45750816003145b806129ff5750816005145b80612a0a5750816007145b80612a155750816008145b80612a20575081600a145b80612a2b575081600c145b15612a385750601f61107b565b81600214612a485750601e61107b565b612a5183612f05565b612a5c57601c612a5f565b601d5b60ff169392505050565b60008181526001830160205260408120548015612b52576000612a8d6001836152fc565b8554909150600090612aa1906001906152fc565b9050818114612b06576000866000018281548110612ac157612ac16152b7565b9060005260206000200154905080876000018481548110612ae457612ae46152b7565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b1757612b17615552565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061107b565b600091505061107b565b5092915050565b6000818152600183016020526040812054612baa5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561107b565b50600061107b565b600054610100900460ff16612c0b5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051612c1690612f41565b612c1e613011565b612c2b8160200151613074565b612c3881604001516130d6565b612c458160600151613138565b612c52816080015161319a565b6119168160a001516131fc565b600054610100900460ff16612cb85760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051612cc390611640565b612cd081602001516119c6565b612cdd8160400151611fce565b612cea8160600151611f70565b608081015180516020820151612d009190611ed3565b60005b8260a0015151811015612d575760008360a001518281518110612d2857612d286152b7565b60200260200101519050612d4481600001518260200151612024565b5080612d4f816152e3565b915050612d03565b5060005b8260c0015151811015612dc657612db48360c001518281518110612d8157612d816152b7565b6020026020010151600001518460c001518381518110612da357612da36152b7565b6020026020010151602001516120b5565b80612dbe816152e3565b915050612d5b565b5060005b8260e0015151811015610a5d5760008360e001518281518110612def57612def6152b7565b60200260200101519050600081602001519050612e19826000015182600001518360200151611bab565b50508080612e26906152e3565b915050612dca565b60006110d3838361325e565b60008282028315801590612e5d575082848281612e5957612e59615515565b0414155b15612e8557604051637472527d60e11b81526004810185905260248101849052604401610b39565b670de0b6b3a764000090049392505050565b612ea1828261345d565b612eab8282613467565b612eb5828261348b565b612ebf8282613577565b612ec98282613766565b612ed382826137b0565b610977828261389d565b612ee782826139b3565b612ef18282613a55565b612efb8282613a77565b6109778282613cc1565b6000612f12600483615568565b158015612f285750612f25606483615568565b15155b8061107b5750612f3a61019083615568565b1592915050565b600054610100900460ff16612f9a5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61300881600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613003919061557c565b613cee565b61191f81613d50565b600054610100900460ff1661306a5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b613072613dde565b565b600054610100900460ff166130cd5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f81613e37565b600054610100900460ff1661312f5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f81613eac565b600054610100900460ff166131915760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f81613f21565b600054610100900460ff166131f35760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f81613fcf565b600054610100900460ff166132555760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f816140ad565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d8919061557c565b90506001600160a01b038116613329576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b39565b600061333361418b565b905080516000146133c457816001600160a01b031663355efdd96133568761420b565b61335f8761420b565b846040518463ffffffff1660e01b815260040161337e93929190615599565b602060405180830381865afa15801561339b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133bf9190615415565b613454565b816001600160a01b031663ac41865a6133dc8761420b565b6133e58761420b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613430573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134549190615415565b95945050505050565b610977828261423f565b60045460ff16156109775760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806134ca575081513a11155b90508061350f5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610b39565b602082015115610d00576000613525483a6152fc565b602084015190915081111580610ea35760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610b39918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156135b35760405163013ce60b60e01b815242600482015260248101839052604401610b39565b60008460028111156135c7576135c761516a565b0361368057826000036135dc57505050505050565b806000036135f6576135ee834261553f565b600d55610ea3565b600061360283426152fc565b90506000613610858361552b565b9050600061361e868361549b565b61362890846152fc565b9050838111156136545760405163013ce60b60e01b815242600482015260248101869052604401610b39565b8561366083600161553f565b61366a919061549b565b613674908661553f565b600d5550610ea3915050565b8142101580156136995750613695818361553f565b4211155b156136a8576135ee82846142d4565b600060018560028111156136be576136be61516a565b146136d1576136cc42612332565b6136da565b6136da8361231b565b905060006136e8848361436c565b9050804210156137145760405163013ce60b60e01b815242600482015260248101829052604401610b39565b6000613720848361553f565b9050428110801561374d5760405163013ce60b60e01b815242600482015260248101839052604401610b39565b61375783886142d4565b600d5550505050505050505050565b61376f82611253565b610977576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b39565b60006137bb83611cc0565b80519091506001600160a01b03166137d257505050565b6000836001600160a01b031682600001516001600160a01b03161461380e57613809613802858460000151612e2e565b8490612e3a565b613810565b825b9050600082602001518210158015613838575060408301511580613838575082604001518211155b905080610947578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610b39565b60006138a8836121ae565b6040805160a08101825282546001600160a01b0316808252600184015460208301526002840154928201929092526003830154606082015260049092015460808301529091506138f757505050565b6000836001600160a01b031682600001516001600160a01b03161461392c57613927613802858460000151612e2e565b61392e565b825b905060008260800151421061394457600061394a565b82604001515b613954908361553f565b9050826020015181111561094757825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610b39565b60006139be836121ae565b80549091506001600160a01b03166139d557505050565b80546000906001600160a01b03858116911614613a0b578154613a06906138029086906001600160a01b0316612e2e565b613a0d565b825b905081600401544210613a3657600060028301556003820154613a30904261553f565b60048301555b80826002016000828254613a4a919061553f565b909155505050505050565b600d54600003613a63575050565b613a6e600d5461438b565b50506000600d55565b600554600003613ab3576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554613aec91906152fc565b90506000613afa3a8361549b565b90506000836040015160001480613b15575083604001518211155b905080613b5f578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610b39929190918252602082015260400190565b6000600555606084015115801590613b775750600085115b15610ea3576000613c4a306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be3919061557c565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c44919061557c565b88612e2e565b90506000613c5884836143c0565b90506000613c668289614432565b90508660600151811115613cb65760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610b39918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff16613d475760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f816144fb565b600054610100900460ff16613da95760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051600180546001600160a01b0319166001600160a01b039092169190911790556020810151604082015161191f9190611e31565b600054610100900460ff166130725760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b600054610100900460ff16613e905760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f81600001518260200151836040015184606001516121e2565b600054610100900460ff16613f055760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f8160000151826020015183604001518460600151611387565b600054610100900460ff16613f7a5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051613f8590611969565b60005b81602001515181101561097757613fbd82602001518281518110613fae57613fae6152b7565b602002602001015160016116e6565b80613fc7816152e3565b915050613f88565b600054610100900460ff166140285760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051805160208201516040830151614041929190612152565b60005b826020015151811015610a5d57600083602001518281518110614069576140696152b7565b6020026020010151905060008160200151905061409882600001518260000151836020015184604001516117f9565b505080806140a5906152e3565b915050614044565b600054610100900460ff166141065760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b805180516020820151604083015161411f929190611f1a565b60005b826020015151811015610a5d57600083602001518281518110614147576141476152b7565b602002602001015190506000816020015190506141768260000151826000015183602001518460400151611a50565b50508080614183906152e3565b915050614122565b60606000614197614594565b9050368111156141b557505060408051600081526020810190915290565b8067ffffffffffffffff8111156141ce576141ce6148ee565b6040519080825280601f01601f1916602001820160405280156141f8576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614614237578161107b565b61107b6145af565b60025415610977576001546002546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401600060405180830381600087803b1580156142c057600080fd5b505af1158015610ea3573d6000803e3d6000fd5b6000806000806142e38661463b565b9194509250905060006142f6868461553f565b90506000614305600c83615568565b90506000614314600c8461552b565b61431e908761553f565b905060006002600a5460ff16600281111561433b5761433b61516a565b146143465784614350565b61435082846129e3565b905061435e8a83858461465a565b9a9950505050505050505050565b600080600061437a4261463b565b50915091506134548583838761465a565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad064906020016119bb565b600082820283158015906143e35750828482816143df576143df615515565b0414155b1561440b57604051637472527d60e11b81526004810185905260248101849052604401610b39565b801561442857670de0b6b3a7640000600019820104600101612313565b6000949350505050565b60008160000361446e576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361447e5750600061107b565b670de0b6b3a76400008381029084828161449a5761449a615515565b04146144dc576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610b39565b8260018203816144ee576144ee615515565b0460010191505092915050565b600054610100900460ff166145545760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600060243610156145a55750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015614612573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614636919061557c565b905090565b6000808061464d620151808504612947565b9196909550909350915050565b600061345484848461466b89614682565b6146748a6146a0565b61467d8b6146bc565b6146c9565b6000806146926201518084615568565b90506110d3610e108261552b565b6000806146af610e1084615568565b90506110d3603c8261552b565b600061107b603c83615568565b6000816146d7603c8561549b565b6146e3610e108761549b565b620151806146f28b8b8b614725565b6146fc919061549b565b614706919061553f565b614710919061553f565b61471a919061553f565b979650505050505050565b60006107b284101561473657600080fd5b838383600062253d8c60046064600c614750600e886155c5565b61475a91906155e5565b61476688611324615613565b6147709190615613565b61477a91906155e5565b61478590600361563b565b61478f91906155e5565b600c8061479d600e886155c5565b6147a791906155e5565b6147b290600c61563b565b6147bd6002886155c5565b6147c791906155c5565b6147d39061016f61563b565b6147dd91906155e5565b6004600c6147ec600e896155c5565b6147f691906155e5565b614802896112c0615613565b61480c9190615613565b614818906105b561563b565b61482291906155e5565b61482e617d4b876155c5565b6148389190615613565b6148429190615613565b61484c91906155c5565b61485691906155c5565b98975050505050505050565b803560ff8116811461487357600080fd5b919050565b6000806000806080858703121561488e57600080fd5b61489785614862565b966020860135965060408601359560600135945092505050565b6001600160a01b038116811461191f57600080fd5b8035614873816148b1565b6000602082840312156148e357600080fd5b81356110d3816148b1565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614927576149276148ee565b60405290565b6040516080810167ffffffffffffffff81118282101715614927576149276148ee565b60405160c0810167ffffffffffffffff81118282101715614927576149276148ee565b6040516020810167ffffffffffffffff81118282101715614927576149276148ee565b604051610120810167ffffffffffffffff81118282101715614927576149276148ee565b604051601f8201601f1916810167ffffffffffffffff811182821017156149e3576149e36148ee565b604052919050565b600067ffffffffffffffff821115614a0557614a056148ee565b5060051b60200190565b600082601f830112614a2057600080fd5b81356020614a35614a30836149eb565b6149ba565b82815260059290921b84018101918181019086841115614a5457600080fd5b8286015b84811015614a78578035614a6b816148b1565b8352918301918301614a58565b509695505050505050565b801515811461191f57600080fd5b60008060408385031215614aa457600080fd5b823567ffffffffffffffff80821115614abc57600080fd5b614ac886838701614a0f565b9350602091508185013581811115614adf57600080fd5b85019050601f81018613614af257600080fd5b8035614b00614a30826149eb565b81815260059190911b82018301908381019088831115614b1f57600080fd5b928401925b82841015614b46578335614b3781614a83565b82529284019290840190614b24565b80955050505050509250929050565b60008060008060808587031215614b6b57600080fd5b8435614b76816148b1565b93506020850135614b86816148b1565b93969395505050506040820135916060013590565b600060408284031215614bad57600080fd5b614bb5614904565b90508135614bc2816148b1565b808252506020820135602082015292915050565b600082601f830112614be757600080fd5b81356020614bf7614a30836149eb565b82815260069290921b84018101918181019086841115614c1657600080fd5b8286015b84811015614a7857614c2c8882614b9b565b835291830191604001614c1a565b600082601f830112614c4b57600080fd5b81356020614c5b614a30836149eb565b82815260609283028501820192828201919087851115614c7a57600080fd5b8387015b85811015614cc85781818a031215614c965760008081fd5b614c9e614904565b8135614ca9816148b1565b8152614cb78a838801614b9b565b818701528452928401928101614c7e565b5090979650505050505050565b600060608284031215614ce757600080fd5b6040516060810181811067ffffffffffffffff82111715614d0a57614d0a6148ee565b6040529050808235614d1b816148b1565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215614d4c57600080fd5b614d5461492d565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215614d9057600080fd5b614d9861492d565b9050614da382614862565b815260208201356020820152604082013560408201526060820135606082015292915050565b80356002811061487357600080fd5b600060408284031215614dea57600080fd5b614df2614904565b9050614dfd82614dc9565b8152602082013567ffffffffffffffff811115614e1957600080fd5b614e2584828501614a0f565b60208301525092915050565b600060808284031215614e4357600080fd5b614e4b614904565b90508135614e58816148b1565b8152614e678360208401614cd5565b602082015292915050565b60006080808385031215614e8557600080fd5b614e8d614904565b9150614e998484614cd5565b8252606083013567ffffffffffffffff811115614eb557600080fd5b8301601f81018513614ec657600080fd5b80356020614ed6614a30836149eb565b82815260079290921b83018101918181019088841115614ef557600080fd5b938201935b83851015614f1b57614f0c8986614e31565b82529385019390820190614efa565b808388015250505050505092915050565b60006101c08284031215614f3f57600080fd5b614f47614950565b9050614f538383614cd5565b8152614f628360608401614d3a565b6020820152614f748360e08401614d7e565b604082015261016082013567ffffffffffffffff80821115614f9557600080fd5b614fa185838601614dd8565b6060840152610180840135915080821115614fbb57600080fd5b614fc785838601614e72565b60808401526101a0840135915080821115614fe157600080fd5b50614fee84828501614e72565b60a08301525092915050565b60006020828403121561500c57600080fd5b813567ffffffffffffffff8082111561502457600080fd5b908301906020828603121561503857600080fd5b615040614973565b82358281111561504f57600080fd5b9290920191610140838703121561506557600080fd5b61506d614996565b615076846148c6565b8152615084602085016148c6565b602082015260408401356040820152606084013560608201526150aa8760808601614b9b565b608082015260c0840135838111156150c157600080fd5b6150cd88828701614bd6565b60a08301525060e0840135838111156150e557600080fd5b6150f188828701614bd6565b60c083015250610100808501358481111561510b57600080fd5b61511789828801614c3a565b60e0840152506101208501358481111561513057600080fd5b61513c89828801614f2c565b9183019190915250815295945050505050565b60006020828403121561516157600080fd5b6110d382614dc9565b634e487b7160e01b600052602160045260246000fd5b60208101600283106151a257634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000606084860312156151bd57600080fd5b83356151c8816148b1565b925060208401356151d8816148b1565b929592945050506040919091013590565b6000806000606084860312156151fe57600080fd5b8335615209816148b1565b95602085013595506040909401359392505050565b6000806040838503121561523157600080fd5b50508035926020909101359150565b6000806040838503121561525357600080fd5b823561525e816148b1565b946020939093013593505050565b60006020828403121561527e57600080fd5b5035919050565b6000806000806080858703121561529b57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016152f5576152f56152cd565b5060010190565b8181038181111561107b5761107b6152cd565b60005b8381101561532a578181015183820152602001615312565b50506000910152565b6000815180845261534b81602086016020860161530f565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082015260006123136040830184615333565b60006020828403121561539357600080fd5b815167ffffffffffffffff808211156153ab57600080fd5b818401915084601f8301126153bf57600080fd5b8151818111156153d1576153d16148ee565b6153e4601f8201601f19166020016149ba565b91508082528560208285010111156153fb57600080fd5b61540c81602084016020860161530f565b50949350505050565b60006020828403121561542757600080fd5b5051919050565b600081518084526020808501945080840160005b8381101561545e57815187529582019590820190600101615442565b509495945050505050565b6001600160a01b03841681526001600160e01b031983166020820152606060408201526000613454606083018461542e565b808202811582820484141761107b5761107b6152cd565b60006001600160a01b0380871683528086166020840152506001600160e01b031984166040830152608060608301526154ee608083018461542e565b9695505050505050565b60006020828403121561550a57600080fd5b81516110d381614a83565b634e487b7160e01b600052601260045260246000fd5b60008261553a5761553a615515565b500490565b8082018082111561107b5761107b6152cd565b634e487b7160e01b600052603160045260246000fd5b60008261557757615577615515565b500690565b60006020828403121561558e57600080fd5b81516110d3816148b1565b60006001600160a01b038086168352808516602084015250606060408301526134546060830184615333565b8181036000831280158383131683831282161715612b5c57612b5c6152cd565b6000826155f4576155f4615515565b600160ff1b82146000198414161561560e5761560e6152cd565b500590565b8082018281126000831280158216821582161715615633576156336152cd565b505092915050565b80820260008212600160ff1b84141615615657576156576152cd565b818105831482151761107b5761107b6152cd56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a264697066735822122066a8530ec48ae0585b37c1cb537479a920b63b961305612153649fe59d24907164736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80637a2f57d0116101b2578063bb3084f6116100f9578063d09edf31116100a2578063d86483e11161007c578063d86483e1146108b3578063e6b5be98146108c6578063eb19ca8b146108d9578063f9eaee0d1461090257600080fd5b8063d09edf3114610874578063d3feb6021461088d578063d45a76cf146108a057600080fd5b8063c31163be116100d3578063c31163be1461082e578063c47590e414610841578063ce11b4181461085457600080fd5b8063bb3084f6146107f7578063bf5d9eab1461080a578063c267621e1461081d57600080fd5b8063a2c456441161015b578063b07addf611610135578063b07addf6146107c8578063b187bd26146107d1578063b96e422c146107ee57600080fd5b8063a2c4564414610728578063a33741771461073b578063a5900c4d1461076e57600080fd5b806390333ba81161018c57806390333ba8146106e25780639eebe7cd146106f5578063a0c3774f1461071557600080fd5b80637a2f57d01461067d57806383f3084f146106c75780638456cb59146106da57600080fd5b8063468534c2116102765780635ea54eee1161021f5780636aacaad8116101f95780636aacaad81461060b5780637125590a146106575780637196f8e91461066a57600080fd5b80635ea54eee1461059a57806360f5dfda146105c657806366d003ac146105f857600080fd5b80635064d83a116102505780635064d83a1461053457806351a424b1146105475780635670e2ce1461057f57600080fd5b8063468534c2146104c15780634a45a3a8146104d45780634fd49efd1461050957600080fd5b806323a6e376116102d85780633f4ba83a116102b25780633f4ba83a1461048c578063423a4b401461049457806342d4693e146104a757600080fd5b806323a6e3761461045357806330eae572146104665780633bbed4a01461047957600080fd5b806321972384116103095780632197238414610389578063221a8c681461039c5780632384c32d1461044057600080fd5b80630fe105e81461033057806310188aef14610345578063119a5e9614610358575b600080fd5b61034361033e366004614878565b610915565b005b6103436103533660046148d1565b61094e565b61036061097b565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b610343610397366004614a91565b6109b2565b61040e6103aa3660046148d1565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610380565b61034361044e366004614b55565b610a62565b610343610461366004614ffa565b610a91565b61034361047436600461514f565b610bb7565b6103436104873660046148d1565b610bf4565b610343610c1d565b6103436104a2366004614b55565b610ca4565b600f546104b49060ff1681565b6040516103809190615180565b6103436104cf3660046151a8565b610cd3565b6104fb7f6ee2f653a7d33776e55e4b2dcd8474d17d7af5b57d625d6ff223ec68702c6d5281565b604051908152602001610380565b60015461051c906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b6103436105423660046151e9565b610d06565b61055a6105553660046148d1565b610eab565b604080516001600160a01b039094168452602084019290925290820152606001610380565b60025460035460408051928352602083019190915201610380565b600654600754600854600954604080519485526020850193909352918301526060820152608001610380565b6105d96105d43660046148d1565b610ed4565b604080516001600160a01b039093168352602083019190915201610380565b601d5461051c906001600160a01b031681565b61040e6040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b61034361066536600461521e565b610ef5565b610343610678366004615240565b610f20565b6105d961068b3660046148d1565b6001600160a01b039081166000908152602460209081526040918290208251808401909352805490931680835260019093015491018190529091565b601c5461051c906001600160a01b031681565b610343610f4b565b6103436106f03660046151e9565b610fbd565b6104fb6107033660046148d1565b60236020526000908152604090205481565b6104fb6107233660046148d1565b610fea565b61034361073636600461526c565b611081565b61055a604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61055a61077c3660046148d1565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6104fb601e5481565b6004546107de9060ff1681565b6040519015158152602001610380565b6104fb601f5481565b6104fb6108053660046148d1565b6110aa565b61034361081836600461526c565b6110da565b6001546001600160a01b031661051c565b61034361083c366004615240565b611103565b61034361084f366004615240565b61112e565b6104fb6108623660046148d1565b60226020526000908152604090205481565b60005461051c906201000090046001600160a01b031681565b61034361089b3660046151e9565b611159565b61040e6108ae3660046148d1565b611186565b6104fb6108c13660046148d1565b6111f5565b6103436108d4366004615285565b611224565b60408051808201909152602080546001600160a01b0316808352602154919092018190526105d9565b6107de6109103660046148d1565b611253565b6109248460ff16848484611295565b61093b336000356001600160e01b03191683611340565b61094785858585611387565b5050505050565b6109578161162c565b61096e336000356001600160e01b03191683611340565b61097782611640565b5050565b600a5460009081908190819060ff16600281111561099b5761099b61516a565b600b54600c54600e54935093509350935090919293565b6109c8336000356001600160e01b0319166116ca565b8051825114610a03576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610a5d57610a4b838281518110610a2457610a246152b7565b6020026020010151838381518110610a3e57610a3e6152b7565b60200260200101516116e6565b80610a55816152e3565b915050610a06565b505050565b610a6e84848484611790565b610a85336000356001600160e01b03191683611340565b610947858585856117f9565b600054610100900460ff1615808015610ab15750600054600160ff909116105b80610acb5750303b158015610acb575060005460ff166001145b610b425760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610b65576000805461ff0019166101001790555b610b6e826118b2565b8015610977576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610bd4816001811115610bcc57610bcc61516a565b60ff16611922565b610beb336000356001600160e01b03191683611340565b61097782611969565b610bfd8161162c565b610c14336000356001600160e01b03191683611340565b610977826119c6565b610c33336000356001600160e01b0319166116ca565b60045460ff16610c6f576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610cb084848484611790565b610cc7336000356001600160e01b03191683611340565b61094785858585611a50565b610cde838383611b10565b610cf5336000356001600160e01b03191683611340565b610d00848484611bab565b50505050565b610d11838383611c47565b610d28336000356001600160e01b03191683611340565b82600003610d3c57610d3984610fea565b92505b610d47848484611ca6565b6000610d5383856152fc565b905060007fa0ec605300000000000000000000000000000000000000000000000000000000610d81876110aa565b601d5460405160248101929092526001600160a01b03808a16604484015260648301899052608483018690521660a482015260c40160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506001600160a01b0390811692631cff79cd92610e50929190911690859060040161535f565b6000604051808303816000875af1158015610e6f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e979190810190615381565b50610ea3868686611cb3565b505050505050565b600080600080610eba85611cc0565b805160208201516040909201519097919650945092505050565b6000806000610ee284611d4b565b8051602090910151909590945092505050565b610eff8282611dc5565b610f16336000356001600160e01b03191683611340565b610a5d8383611e31565b610f2a8282611e76565b610f41336000356001600160e01b03191683611340565b610a5d8383611ed3565b610f61336000356001600160e01b0319166116ca565b60045460ff1615610f855760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610fc8838383611c47565b610fdf336000356001600160e01b03191683611340565b610d00848484611f1a565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015611057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107b9190615415565b92915050565b61108a81611922565b6110a1336000356001600160e01b03191683611340565b61097782611f70565b6001600160a01b03811660009081526022602052604081205480156110cf57806110d3565b601e545b9392505050565b6110e381611922565b6110fa336000356001600160e01b03191683611340565b61097782611fce565b61110d8282611e76565b611124336000356001600160e01b03191683611340565b610a5d8383612024565b6111388282611e76565b61114f336000356001600160e01b03191683611340565b610a5d83836120b5565b611164838383611c47565b61117b336000356001600160e01b03191683611340565b610d00848484612152565b600080600080600080611198876121ae565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b038116600090815260236020526040812054801561121a57806110d3565b601f549392505050565b61123084848484611295565b611247336000356001600160e01b03191683611340565b610947858585856121e2565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff16818111156112895761128961516a565b1461107b5780156110d3565b60408051600480825260a082019092526060916020820160808036833701905050905084816000815181106112cc576112cc6152b7565b60200260200101818152505083816001815181106112ec576112ec6152b7565b602002602001018181525050828160028151811061130c5761130c6152b7565b602002602001018181525050818160038151811061132c5761132c6152b7565b602002602001018181525050949350505050565b61134b83838361227d565b610a5d578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610b3993929190615469565b60ff841661143857600081118061139e5750600082115b1561143357826000036113d05760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b39565b8015806113dc57508281115b1561140657604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b39565b8160000361143357604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b611595565b826000036114655760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b39565b80158061147d575061147a6224ea008461549b565b81115b156114a757604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b39565b816000036114d457604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b60001960ff85160161151657601c6114eb8361231b565b111561143357604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b60011960ff85160161155e5761152b82612332565b6115348361231b565b1461143357604051635686bf5960e11b815260ff8516600482015260248101839052604401610b39565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610b39565b8360ff1660028111156115aa576115aa61516a565b600a805460ff191660018360028111156115c6576115c661516a565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b606061107b826001600160a01b0316611922565b6001600160a01b038116611680576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b6040805160008152602081019091526109779083908390611340565b6001600160a01b038216611726576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061173b57611736601083612355565b611746565b61174660108361236a565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611784911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106117d0576117d06152b7565b602002602001018181525050836001600160a01b0316816001815181106112ec576112ec6152b7565b6001600160a01b038416611839576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061185d9084848461237f565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b600054610100900460ff1661190b5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b80516119169061244f565b61191f816124bf565b50565b604080516001808252818301909252606091602080830190803683370190505090508181600081518110611958576119586152b7565b602002602001018181525050919050565b600f805482919060ff1916600183818111156119875761198761516a565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516119bb9190615180565b60405180910390a150565b6001600160a01b038116611a06576040517f2586ae9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383169081179091556040517f9d900d71c28433348acb1bec780a061608a96b149370abce77fd54ba2d47940190600090a250565b6001600160a01b038416611a90576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611ab490848484612518565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611b02929190918252602082015260400190565b60405180910390a350505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611b4f57611b4f6152b7565b602002602001018181525050826001600160a01b031681600181518110611b7857611b786152b7565b6020026020010181815250508181600281518110611b9857611b986152b7565b6020026020010181815250509392505050565b6001600160a01b038316611bd257604051636070789160e11b815260040160405180910390fd5b6001600160a01b0383166000908152602460205260409020611bf5908383612677565b816001600160a01b0316836001600160a01b03167fc4fdf80c1c19c6c15745294372240e0b830511ef069d2fe082f76e6ac663cd7683604051611c3a91815260200190565b60405180910390a3505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611c8657611c866152b7565b6020026020010181815250508281600181518110611b7857611b786152b7565b610a5d83836000846126ea565b610a5d83836000846128ba565b611ced604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611d165780611d19565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b604080518082018252600080825260208083018290526001600160a01b0385811683526024825291849020845180860190955280549092168085526001909201549084015290919015611d9e57806110d3565b60408051808201909152602080546001600160a01b03168252602154908201529392505050565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611dfc57611dfc6152b7565b6020026020010181815250508160001c81600181518110611e1f57611e1f6152b7565b60200260200101818152505092915050565b8015611e6c576040517f9842f26f00000000000000000000000000000000000000000000000000000000815260048101829052602401610b39565b61097782826128c4565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611eb357611eb36152b7565b6020026020010181815250508181600181518110611e1f57611e1f6152b7565b611edf60208383612677565b816001600160a01b03167f145629ab5475088f72def3b209864cc49abc02a2f230e887ad1f61629bc5dbaf8260405161178491815260200190565b611f276016848484612518565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611f995760405163c2b0b62d60e01b815260040160405180910390fd5b601f8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf8906020016119bb565b468103611ff15760405163499ff75560e01b815260048101829052602401610b39565b601e81905560405181907f972b12d97bdf2afd537325c7e5db7c15141bb5a7e7f5a65b76f3c2b4f651991090600090a250565b6001600160a01b03821661204b57604051636070789160e11b815260040160405180910390fd5b46810361206e5760405163499ff75560e01b815260048101829052602401610b39565b6001600160a01b038216600081815260226020526040808220849055518392917ffef363cd40fa337ea6f51a9c42c6dbb8225c1c93c2dea4384bf58ca8a257aa9691a35050565b6001600160a01b0382166120dc57604051636070789160e11b815260040160405180910390fd5b670de0b6b3a76400008111156121055760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b03821660008181526023602052604090819020839055517f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed3906117849084815260200190565b61215f601284848461237f565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b6020526040812080549192909116156121d957806110d3565b60169392505050565b670de0b6b3a7640000811115612224576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d6919060800161161e565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906122d29087903090889088906004016154b2565b602060405180830381865afa1580156122ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231391906154f8565b949350505050565b600061231361232d620151808461552b565b612947565b6000808061234661232d620151808661552b565b509150915061231382826129e3565b60006110d3836001600160a01b038416612a69565b60006110d3836001600160a01b038416612b63565b60006001600160a01b038416158015612396575082155b80156123a0575081155b905060006001600160a01b038516158015906123c457508215806123c45750838310155b9050811580156123d2575080155b15612422576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b39565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff166124a85760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b6124b6816101000151612bb2565b61191f81612c5f565b600054610100900460ff1661191f5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b60006001600160a01b03841615801561252f575082155b8015612539575081155b905060006001600160a01b038516158015906125555750600084115b80156125615750600083115b90508115801561256f575080155b156125bf576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b39565b600386018390556001860184905581156125e6576000600287018190556004870155612652565b856004015460000361260d5760006002870155612603834261553f565b6004870155612652565b85546001600160a01b03868116911614612652578554600090612639906001600160a01b031687612e2e565b600288015490915061264b9082612e3a565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b6001600160a01b03821615801561268d57508015155b156126c4576040517f3d2584f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82546001600160a01b0319166001600160a01b0392909216919091178255600190910155565b6126f48484612e97565b6001600160a01b03841661271b57604051636070789160e11b815260040160405180910390fd5b82600003612755576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61275e846110aa565b600003612797576040517fa9b1d14100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006127a2856111f5565b9050808311156127e8576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610b39565b816000036127f65750610d00565b600061280186611d4b565b80519091506001600160a01b031661283c5760208101516040516303b27ef760e01b8152610b39918591600401918252602082015260400190565b6000866001600160a01b031682600001516001600160a01b0316146128785761287361286c888460000151612e2e565b8590612e3a565b61287a565b835b905081602001518111156128b15760208201516040516303b27ef760e01b8152610b39918391600401918252602082015260400190565b50505050505050565b610d008484612edd565b80821480156128d257508115155b1561290c576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610b39565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816129a4576129a4615515565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806129f45750816003145b806129ff5750816005145b80612a0a5750816007145b80612a155750816008145b80612a20575081600a145b80612a2b575081600c145b15612a385750601f61107b565b81600214612a485750601e61107b565b612a5183612f05565b612a5c57601c612a5f565b601d5b60ff169392505050565b60008181526001830160205260408120548015612b52576000612a8d6001836152fc565b8554909150600090612aa1906001906152fc565b9050818114612b06576000866000018281548110612ac157612ac16152b7565b9060005260206000200154905080876000018481548110612ae457612ae46152b7565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b1757612b17615552565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061107b565b600091505061107b565b5092915050565b6000818152600183016020526040812054612baa5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561107b565b50600061107b565b600054610100900460ff16612c0b5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051612c1690612f41565b612c1e613011565b612c2b8160200151613074565b612c3881604001516130d6565b612c458160600151613138565b612c52816080015161319a565b6119168160a001516131fc565b600054610100900460ff16612cb85760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051612cc390611640565b612cd081602001516119c6565b612cdd8160400151611fce565b612cea8160600151611f70565b608081015180516020820151612d009190611ed3565b60005b8260a0015151811015612d575760008360a001518281518110612d2857612d286152b7565b60200260200101519050612d4481600001518260200151612024565b5080612d4f816152e3565b915050612d03565b5060005b8260c0015151811015612dc657612db48360c001518281518110612d8157612d816152b7565b6020026020010151600001518460c001518381518110612da357612da36152b7565b6020026020010151602001516120b5565b80612dbe816152e3565b915050612d5b565b5060005b8260e0015151811015610a5d5760008360e001518281518110612def57612def6152b7565b60200260200101519050600081602001519050612e19826000015182600001518360200151611bab565b50508080612e26906152e3565b915050612dca565b60006110d3838361325e565b60008282028315801590612e5d575082848281612e5957612e59615515565b0414155b15612e8557604051637472527d60e11b81526004810185905260248101849052604401610b39565b670de0b6b3a764000090049392505050565b612ea1828261345d565b612eab8282613467565b612eb5828261348b565b612ebf8282613577565b612ec98282613766565b612ed382826137b0565b610977828261389d565b612ee782826139b3565b612ef18282613a55565b612efb8282613a77565b6109778282613cc1565b6000612f12600483615568565b158015612f285750612f25606483615568565b15155b8061107b5750612f3a61019083615568565b1592915050565b600054610100900460ff16612f9a5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61300881600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613003919061557c565b613cee565b61191f81613d50565b600054610100900460ff1661306a5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b613072613dde565b565b600054610100900460ff166130cd5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f81613e37565b600054610100900460ff1661312f5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f81613eac565b600054610100900460ff166131915760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f81613f21565b600054610100900460ff166131f35760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f81613fcf565b600054610100900460ff166132555760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f816140ad565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d8919061557c565b90506001600160a01b038116613329576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b39565b600061333361418b565b905080516000146133c457816001600160a01b031663355efdd96133568761420b565b61335f8761420b565b846040518463ffffffff1660e01b815260040161337e93929190615599565b602060405180830381865afa15801561339b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133bf9190615415565b613454565b816001600160a01b031663ac41865a6133dc8761420b565b6133e58761420b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613430573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134549190615415565b95945050505050565b610977828261423f565b60045460ff16156109775760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806134ca575081513a11155b90508061350f5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610b39565b602082015115610d00576000613525483a6152fc565b602084015190915081111580610ea35760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610b39918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156135b35760405163013ce60b60e01b815242600482015260248101839052604401610b39565b60008460028111156135c7576135c761516a565b0361368057826000036135dc57505050505050565b806000036135f6576135ee834261553f565b600d55610ea3565b600061360283426152fc565b90506000613610858361552b565b9050600061361e868361549b565b61362890846152fc565b9050838111156136545760405163013ce60b60e01b815242600482015260248101869052604401610b39565b8561366083600161553f565b61366a919061549b565b613674908661553f565b600d5550610ea3915050565b8142101580156136995750613695818361553f565b4211155b156136a8576135ee82846142d4565b600060018560028111156136be576136be61516a565b146136d1576136cc42612332565b6136da565b6136da8361231b565b905060006136e8848361436c565b9050804210156137145760405163013ce60b60e01b815242600482015260248101829052604401610b39565b6000613720848361553f565b9050428110801561374d5760405163013ce60b60e01b815242600482015260248101839052604401610b39565b61375783886142d4565b600d5550505050505050505050565b61376f82611253565b610977576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b39565b60006137bb83611cc0565b80519091506001600160a01b03166137d257505050565b6000836001600160a01b031682600001516001600160a01b03161461380e57613809613802858460000151612e2e565b8490612e3a565b613810565b825b9050600082602001518210158015613838575060408301511580613838575082604001518211155b905080610947578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610b39565b60006138a8836121ae565b6040805160a08101825282546001600160a01b0316808252600184015460208301526002840154928201929092526003830154606082015260049092015460808301529091506138f757505050565b6000836001600160a01b031682600001516001600160a01b03161461392c57613927613802858460000151612e2e565b61392e565b825b905060008260800151421061394457600061394a565b82604001515b613954908361553f565b9050826020015181111561094757825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610b39565b60006139be836121ae565b80549091506001600160a01b03166139d557505050565b80546000906001600160a01b03858116911614613a0b578154613a06906138029086906001600160a01b0316612e2e565b613a0d565b825b905081600401544210613a3657600060028301556003820154613a30904261553f565b60048301555b80826002016000828254613a4a919061553f565b909155505050505050565b600d54600003613a63575050565b613a6e600d5461438b565b50506000600d55565b600554600003613ab3576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554613aec91906152fc565b90506000613afa3a8361549b565b90506000836040015160001480613b15575083604001518211155b905080613b5f578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610b39929190918252602082015260400190565b6000600555606084015115801590613b775750600085115b15610ea3576000613c4a306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be3919061557c565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c44919061557c565b88612e2e565b90506000613c5884836143c0565b90506000613c668289614432565b90508660600151811115613cb65760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610b39918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff16613d475760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f816144fb565b600054610100900460ff16613da95760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051600180546001600160a01b0319166001600160a01b039092169190911790556020810151604082015161191f9190611e31565b600054610100900460ff166130725760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b600054610100900460ff16613e905760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f81600001518260200151836040015184606001516121e2565b600054610100900460ff16613f055760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b61191f8160000151826020015183604001518460600151611387565b600054610100900460ff16613f7a5760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051613f8590611969565b60005b81602001515181101561097757613fbd82602001518281518110613fae57613fae6152b7565b602002602001015160016116e6565b80613fc7816152e3565b915050613f88565b600054610100900460ff166140285760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b8051805160208201516040830151614041929190612152565b60005b826020015151811015610a5d57600083602001518281518110614069576140696152b7565b6020026020010151905060008160200151905061409882600001518260000151836020015184604001516117f9565b505080806140a5906152e3565b915050614044565b600054610100900460ff166141065760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b805180516020820151604083015161411f929190611f1a565b60005b826020015151811015610a5d57600083602001518281518110614147576141476152b7565b602002602001015190506000816020015190506141768260000151826000015183602001518460400151611a50565b50508080614183906152e3565b915050614122565b60606000614197614594565b9050368111156141b557505060408051600081526020810190915290565b8067ffffffffffffffff8111156141ce576141ce6148ee565b6040519080825280601f01601f1916602001820160405280156141f8576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614614237578161107b565b61107b6145af565b60025415610977576001546002546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401600060405180830381600087803b1580156142c057600080fd5b505af1158015610ea3573d6000803e3d6000fd5b6000806000806142e38661463b565b9194509250905060006142f6868461553f565b90506000614305600c83615568565b90506000614314600c8461552b565b61431e908761553f565b905060006002600a5460ff16600281111561433b5761433b61516a565b146143465784614350565b61435082846129e3565b905061435e8a83858461465a565b9a9950505050505050505050565b600080600061437a4261463b565b50915091506134548583838761465a565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad064906020016119bb565b600082820283158015906143e35750828482816143df576143df615515565b0414155b1561440b57604051637472527d60e11b81526004810185905260248101849052604401610b39565b801561442857670de0b6b3a7640000600019820104600101612313565b6000949350505050565b60008160000361446e576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361447e5750600061107b565b670de0b6b3a76400008381029084828161449a5761449a615515565b04146144dc576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610b39565b8260018203816144ee576144ee615515565b0460010191505092915050565b600054610100900460ff166145545760405162461bcd60e51b815260206004820152602b602482015260008051602061566c83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b39565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600060243610156145a55750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015614612573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614636919061557c565b905090565b6000808061464d620151808504612947565b9196909550909350915050565b600061345484848461466b89614682565b6146748a6146a0565b61467d8b6146bc565b6146c9565b6000806146926201518084615568565b90506110d3610e108261552b565b6000806146af610e1084615568565b90506110d3603c8261552b565b600061107b603c83615568565b6000816146d7603c8561549b565b6146e3610e108761549b565b620151806146f28b8b8b614725565b6146fc919061549b565b614706919061553f565b614710919061553f565b61471a919061553f565b979650505050505050565b60006107b284101561473657600080fd5b838383600062253d8c60046064600c614750600e886155c5565b61475a91906155e5565b61476688611324615613565b6147709190615613565b61477a91906155e5565b61478590600361563b565b61478f91906155e5565b600c8061479d600e886155c5565b6147a791906155e5565b6147b290600c61563b565b6147bd6002886155c5565b6147c791906155c5565b6147d39061016f61563b565b6147dd91906155e5565b6004600c6147ec600e896155c5565b6147f691906155e5565b614802896112c0615613565b61480c9190615613565b614818906105b561563b565b61482291906155e5565b61482e617d4b876155c5565b6148389190615613565b6148429190615613565b61484c91906155c5565b61485691906155c5565b98975050505050505050565b803560ff8116811461487357600080fd5b919050565b6000806000806080858703121561488e57600080fd5b61489785614862565b966020860135965060408601359560600135945092505050565b6001600160a01b038116811461191f57600080fd5b8035614873816148b1565b6000602082840312156148e357600080fd5b81356110d3816148b1565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614927576149276148ee565b60405290565b6040516080810167ffffffffffffffff81118282101715614927576149276148ee565b60405160c0810167ffffffffffffffff81118282101715614927576149276148ee565b6040516020810167ffffffffffffffff81118282101715614927576149276148ee565b604051610120810167ffffffffffffffff81118282101715614927576149276148ee565b604051601f8201601f1916810167ffffffffffffffff811182821017156149e3576149e36148ee565b604052919050565b600067ffffffffffffffff821115614a0557614a056148ee565b5060051b60200190565b600082601f830112614a2057600080fd5b81356020614a35614a30836149eb565b6149ba565b82815260059290921b84018101918181019086841115614a5457600080fd5b8286015b84811015614a78578035614a6b816148b1565b8352918301918301614a58565b509695505050505050565b801515811461191f57600080fd5b60008060408385031215614aa457600080fd5b823567ffffffffffffffff80821115614abc57600080fd5b614ac886838701614a0f565b9350602091508185013581811115614adf57600080fd5b85019050601f81018613614af257600080fd5b8035614b00614a30826149eb565b81815260059190911b82018301908381019088831115614b1f57600080fd5b928401925b82841015614b46578335614b3781614a83565b82529284019290840190614b24565b80955050505050509250929050565b60008060008060808587031215614b6b57600080fd5b8435614b76816148b1565b93506020850135614b86816148b1565b93969395505050506040820135916060013590565b600060408284031215614bad57600080fd5b614bb5614904565b90508135614bc2816148b1565b808252506020820135602082015292915050565b600082601f830112614be757600080fd5b81356020614bf7614a30836149eb565b82815260069290921b84018101918181019086841115614c1657600080fd5b8286015b84811015614a7857614c2c8882614b9b565b835291830191604001614c1a565b600082601f830112614c4b57600080fd5b81356020614c5b614a30836149eb565b82815260609283028501820192828201919087851115614c7a57600080fd5b8387015b85811015614cc85781818a031215614c965760008081fd5b614c9e614904565b8135614ca9816148b1565b8152614cb78a838801614b9b565b818701528452928401928101614c7e565b5090979650505050505050565b600060608284031215614ce757600080fd5b6040516060810181811067ffffffffffffffff82111715614d0a57614d0a6148ee565b6040529050808235614d1b816148b1565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215614d4c57600080fd5b614d5461492d565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215614d9057600080fd5b614d9861492d565b9050614da382614862565b815260208201356020820152604082013560408201526060820135606082015292915050565b80356002811061487357600080fd5b600060408284031215614dea57600080fd5b614df2614904565b9050614dfd82614dc9565b8152602082013567ffffffffffffffff811115614e1957600080fd5b614e2584828501614a0f565b60208301525092915050565b600060808284031215614e4357600080fd5b614e4b614904565b90508135614e58816148b1565b8152614e678360208401614cd5565b602082015292915050565b60006080808385031215614e8557600080fd5b614e8d614904565b9150614e998484614cd5565b8252606083013567ffffffffffffffff811115614eb557600080fd5b8301601f81018513614ec657600080fd5b80356020614ed6614a30836149eb565b82815260079290921b83018101918181019088841115614ef557600080fd5b938201935b83851015614f1b57614f0c8986614e31565b82529385019390820190614efa565b808388015250505050505092915050565b60006101c08284031215614f3f57600080fd5b614f47614950565b9050614f538383614cd5565b8152614f628360608401614d3a565b6020820152614f748360e08401614d7e565b604082015261016082013567ffffffffffffffff80821115614f9557600080fd5b614fa185838601614dd8565b6060840152610180840135915080821115614fbb57600080fd5b614fc785838601614e72565b60808401526101a0840135915080821115614fe157600080fd5b50614fee84828501614e72565b60a08301525092915050565b60006020828403121561500c57600080fd5b813567ffffffffffffffff8082111561502457600080fd5b908301906020828603121561503857600080fd5b615040614973565b82358281111561504f57600080fd5b9290920191610140838703121561506557600080fd5b61506d614996565b615076846148c6565b8152615084602085016148c6565b602082015260408401356040820152606084013560608201526150aa8760808601614b9b565b608082015260c0840135838111156150c157600080fd5b6150cd88828701614bd6565b60a08301525060e0840135838111156150e557600080fd5b6150f188828701614bd6565b60c083015250610100808501358481111561510b57600080fd5b61511789828801614c3a565b60e0840152506101208501358481111561513057600080fd5b61513c89828801614f2c565b9183019190915250815295945050505050565b60006020828403121561516157600080fd5b6110d382614dc9565b634e487b7160e01b600052602160045260246000fd5b60208101600283106151a257634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000606084860312156151bd57600080fd5b83356151c8816148b1565b925060208401356151d8816148b1565b929592945050506040919091013590565b6000806000606084860312156151fe57600080fd5b8335615209816148b1565b95602085013595506040909401359392505050565b6000806040838503121561523157600080fd5b50508035926020909101359150565b6000806040838503121561525357600080fd5b823561525e816148b1565b946020939093013593505050565b60006020828403121561527e57600080fd5b5035919050565b6000806000806080858703121561529b57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016152f5576152f56152cd565b5060010190565b8181038181111561107b5761107b6152cd565b60005b8381101561532a578181015183820152602001615312565b50506000910152565b6000815180845261534b81602086016020860161530f565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082015260006123136040830184615333565b60006020828403121561539357600080fd5b815167ffffffffffffffff808211156153ab57600080fd5b818401915084601f8301126153bf57600080fd5b8151818111156153d1576153d16148ee565b6153e4601f8201601f19166020016149ba565b91508082528560208285010111156153fb57600080fd5b61540c81602084016020860161530f565b50949350505050565b60006020828403121561542757600080fd5b5051919050565b600081518084526020808501945080840160005b8381101561545e57815187529582019590820190600101615442565b509495945050505050565b6001600160a01b03841681526001600160e01b031983166020820152606060408201526000613454606083018461542e565b808202811582820484141761107b5761107b6152cd565b60006001600160a01b0380871683528086166020840152506001600160e01b031984166040830152608060608301526154ee608083018461542e565b9695505050505050565b60006020828403121561550a57600080fd5b81516110d381614a83565b634e487b7160e01b600052601260045260246000fd5b60008261553a5761553a615515565b500490565b8082018082111561107b5761107b6152cd565b634e487b7160e01b600052603160045260246000fd5b60008261557757615577615515565b500690565b60006020828403121561558e57600080fd5b81516110d3816148b1565b60006001600160a01b038086168352808516602084015250606060408301526134546060830184615333565b8181036000831280158383131683831282161715612b5c57612b5c6152cd565b6000826155f4576155f4615515565b600160ff1b82146000198414161561560e5761560e6152cd565b500590565b8082018281126000831280158216821582161715615633576156336152cd565b505092915050565b80820260008212600160ff1b84141615615657576156576152cd565b818105831482151761107b5761107b6152cd56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a264697066735822122066a8530ec48ae0585b37c1cb537479a920b63b961305612153649fe59d24907164736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
