{
  "_format": "hh-sol-artifact-1",
  "contractName": "MockTimeNonfungiblePositionManager",
  "sourceName": "contracts/test/MockTimeNonfungiblePositionManager.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_SAMB",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenDescriptor",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "name": "Collect",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "name": "DecreaseLiquidity",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "name": "IncreaseLiquidity",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PERMIT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SAMB",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount0Owed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1Owed",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "astraCLMintCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint128",
              "name": "amount0Max",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "amount1Max",
              "type": "uint128"
            }
          ],
          "internalType": "struct INonfungiblePositionManager.CollectParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "collect",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        }
      ],
      "name": "createAndInitializePoolIfNecessary",
      "outputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint128",
              "name": "liquidity",
              "type": "uint128"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            }
          ],
          "internalType": "struct INonfungiblePositionManager.DecreaseLiquidityParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "decreaseLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount0Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            }
          ],
          "internalType": "struct INonfungiblePositionManager.IncreaseLiquidityParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "increaseLiquidity",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "fee",
              "type": "uint24"
            },
            {
              "internalType": "int24",
              "name": "tickLower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "tickUpper",
              "type": "int24"
            },
            {
              "internalType": "uint256",
              "name": "amount0Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            }
          ],
          "internalType": "struct INonfungiblePositionManager.MintParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "positions",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "nonce",
          "type": "uint96"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthInside0LastX128",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthInside1LastX128",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "tokensOwed0",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "tokensOwed1",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "refundAMB",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowed",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowedIfNecessary",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitIfNecessary",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_time",
          "type": "uint256"
        }
      ],
      "name": "setTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "sweepToken",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "unwrapSAMB",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x610120604052600d80546001600160b01b0319166001176001600160b01b0316600160b01b1790553480156200003457600080fd5b5060405162006331380380620063318339810160408190526200005791620002e1565b82828282826040518060400160405280601c81526020017f417374726144455820434c20506f736974696f6e73204e46542d5631000000008152506040518060400160405280600a8152602001694153542d434c2d504f5360b01b815250604051806040016040528060018152602001603160f81b8152508282620000e96301ffc9a760e01b6200019360201b60201c565b8151620000fe90600690602085019062000218565b5080516200011490600790602084019062000218565b50620001276380ac58cd60e01b62000193565b62000139635b5e139f60e01b62000193565b6200014b63780e9d6360e01b62000193565b50508251602093840120608052805192019190912060a052506001600160601b0319606092831b811660c05290821b811660e05291901b1661010052506200032a9350505050565b6001600160e01b03198082161415620001f3576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200025057600085556200029b565b82601f106200026b57805160ff19168380011785556200029b565b828001600101855582156200029b579182015b828111156200029b5782518255916020019190600101906200027e565b50620002a9929150620002ad565b5090565b5b80821115620002a95760008155600101620002ae565b80516001600160a01b0381168114620002dc57600080fd5b919050565b600080600060608486031215620002f6578283fd5b6200030184620002c4565b92506200031160208501620002c4565b91506200032160408501620002c4565b90509250925092565b60805160a05160c05160601c60e05160601c6101005160601c615f82620003af60003980612b415250806102b4528061227a528061270552806127fb5280613a565280613a9c5280613b10525080610ae25280610e075280610ece52806117575280612ac95280612e84528061361a5250806115285250806115075250615f826000f3fe6080604052600436106102a45760003560e01c80636c0360eb1161016e578063ac9650d8116100cb578063c87b56dd1161007f578063e985e9c511610064578063e985e9c514610730578063f3995c6714610750578063fc6f78651461076357610328565b8063c87b56dd146106fd578063df2ab5bb1461071d57610328565b8063c2e3140a116100b0578063c2e3140a146106cd578063c45a0155146106e0578063c53af304146106f557610328565b8063ac9650d81461068d578063b88d4fde146106ad57610328565b806395d89b4111610122578063a22cb46511610107578063a22cb46514610647578063a4a78f0c14610667578063a98ce37f1461067a57610328565b806395d89b41146105fa57806399fbab881461060f57610328565b80637ac2ff7b116101535780637ac2ff7b146105af57806388316456146105c257806390793ea8146105e557610328565b80636c0360eb1461057a57806370a082311461058f57610328565b80632f745c591161021c57806342966c68116101d05780634cb42d2d116101b55780634cb42d2d1461051a5780634f6ccce71461053a5780636352211e1461055a57610328565b806342966c68146104f45780634659a4941461050757610328565b80633644e515116102015780633644e5151461049f5780633beb26c4146104b457806342842e0e146104d457610328565b80632f745c591461046a57806330adf81f1461048a57610328565b80630c49ccbe1161027357806318160ddd1161025857806318160ddd14610406578063219f5d171461042857806323b872dd1461044a57610328565b80630c49ccbe146103d257806313ead562146103f357610328565b806301ffc9a71461032d57806306fdde0314610363578063081812fc14610385578063095ea7b3146103b257610328565b3661032857336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610326576040805162461bcd60e51b815260206004820152600860248201527f4e6f742053414d42000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561033957600080fd5b5061034d6103483660046153e8565b610776565b60405161035a9190615960565b60405180910390f35b34801561036f57600080fd5b506103786107b1565b60405161035a91906159b3565b34801561039157600080fd5b506103a56103a03660046156fa565b610847565b60405161035a9190615824565b3480156103be57600080fd5b506103266103cd3660046152b2565b6108a3565b6103e56103e03660046154c5565b610979565b60405161035a929190615b84565b6103a5610401366004615145565b610de5565b34801561041257600080fd5b5061041b6110f2565b60405161035a919061596b565b61043b6104363660046154d6565b611103565b60405161035a93929190615b3f565b34801561045657600080fd5b5061032661046536600461519e565b61143c565b34801561047657600080fd5b5061041b6104853660046152b2565b611493565b34801561049657600080fd5b5061041b6114be565b3480156104ab57600080fd5b5061041b6114e2565b3480156104c057600080fd5b506103266104cf3660046156fa565b6115a0565b3480156104e057600080fd5b506103266104ef36600461519e565b6115a5565b6103266105023660046156fa565b6115c0565b61032661051536600461531e565b61168f565b34801561052657600080fd5b50610326610535366004615759565b611742565b34801561054657600080fd5b5061041b6105553660046156fa565b6117c0565b34801561056657600080fd5b506103a56105753660046156fa565b6117d6565b34801561058657600080fd5b506103786117fe565b34801561059b57600080fd5b5061041b6105aa3660046150f1565b611803565b6103266105bd36600461531e565b61186b565b6105d56105d0366004615592565b611d17565b60405161035a9493929190615b60565b3480156105f157600080fd5b506103a5612278565b34801561060657600080fd5b5061037861229c565b34801561061b57600080fd5b5061062f61062a3660046156fa565b6122fd565b60405161035a9c9b9a99989796959493929190615b92565b34801561065357600080fd5b50610326610662366004615285565b61252c565b61032661067536600461531e565b61264f565b610326610688366004615712565b612701565b6106a061069b366004615379565b612881565b60405161035a91906158e2565b3480156106b957600080fd5b506103266106c83660046151de565b6129c1565b6103266106db36600461531e565b612a1f565b3480156106ec57600080fd5b506103a5612ac7565b610326612aeb565b34801561070957600080fd5b506103786107183660046156fa565b612afd565b61032661072b3660046152dd565b612bcc565b34801561073c57600080fd5b5061034d61074b36600461510d565b612caf565b61032661075e36600461531e565b612cdd565b6103e56107713660046154ae565b612d68565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b60068054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561083d5780601f106108125761010080835404028352916020019161083d565b820191906000526020600020905b81548152906001019060200180831161082057829003601f168201915b5050505050905090565b600061085282613286565b6108775760405162461bcd60e51b815260040161086e906159fd565b60405180910390fd5b506000908152600c60205260409020546c0100000000000000000000000090046001600160a01b031690565b60006108ae826117d6565b9050806001600160a01b0316836001600160a01b031614156109015760405162461bcd60e51b8152600401808060200182810382526021815260200180615f246021913960400191505060405180910390fd5b806001600160a01b0316610913613293565b6001600160a01b0316148061092f575061092f8161074b613293565b61096a5760405162461bcd60e51b8152600401808060200182810382526038815260200180615e4e6038913960400191505060405180910390fd5b6109748383613297565b505050565b6000808235610988338261331b565b6109a45760405162461bcd60e51b815260040161086e906159c6565b8360800135806109b26133b7565b1115610a05576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b6000610a1760408701602088016155a4565b6001600160801b031611610a2a57600080fd5b84356000908152600c602090815260409182902060018101549092600160801b9091046001600160801b031691610a659189019089016155a4565b6001600160801b0316816001600160801b03161015610a8357600080fd5b60018281015469ffffffffffffffffffff166000908152600b60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b90910462ffffff1690830152610b077f0000000000000000000000000000000000000000000000000000000000000000836133bd565b60018501549091506001600160a01b0382169063a34123a7906a01000000000000000000008104600290810b91600160681b9004900b610b4d60408e0160208f016155a4565b6040518463ffffffff1660e01b8152600401610b6b9392919061598d565b6040805180830381600087803b158015610b8457600080fd5b505af1158015610b98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbc9190615736565b909850965060408901358810801590610bd9575088606001358710155b610bf55760405162461bcd60e51b815260040161086e90615a5a565b6001840154600090610c259030906a01000000000000000000008104600290810b91600160681b9004900b6134b9565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401610c56919061596b565b60a06040518083038186803b158015610c6e57600080fd5b505afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906155ee565b50509250925050610ccb87600201548303876001600160801b0316600160801b613513565b6004880180546fffffffffffffffffffffffffffffffff198116928e016001600160801b039182160181169290921790556003880154610d1591908303908816600160801b613513565b6004880180546001600160801b03808216938e01600160801b9283900482160116029190911790556002870182905560038701819055610d5b60408d0160208e016155a4565b86038760010160106101000a8154816001600160801b0302191690836001600160801b031602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d6020016020810190610dbe91906155a4565b8d8d604051610dcf93929190615b3f565b60405180910390a2505050505050505050915091565b6000836001600160a01b0316856001600160a01b031610610e0557600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631698ee828686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff168152602001935050505060206040518083038186803b158015610e9057600080fd5b505afa158015610ea4573d6000803e3d6000fd5b505050506040513d6020811015610eba57600080fd5b505190506001600160a01b038116611009577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a16712958686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff1681526020019350505050602060405180830381600087803b158015610f5957600080fd5b505af1158015610f6d573d6000803e3d6000fd5b505050506040513d6020811015610f8357600080fd5b5051604080517ff637731d0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b158015610fec57600080fd5b505af1158015611000573d6000803e3d6000fd5b505050506110ea565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561104457600080fd5b505afa158015611058573d6000803e3d6000fd5b505050506040513d60e081101561106e57600080fd5b505190506001600160a01b0381166110e857816001600160a01b031663f637731d846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156110cf57600080fd5b505af11580156110e3573d6000803e3d6000fd5b505050505b505b949350505050565b60006110fe60026135c2565b905090565b60008060008360a00135806111166133b7565b1115611169576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b84356000908152600c6020908152604080832060018082015469ffffffffffffffffffff81168652600b855283862084516060808201875282546001600160a01b039081168352929094015480831682890190815262ffffff600160a01b9092048216838901908152885161014081018a528451861681529151909416818a01529251168287015230828501526a01000000000000000000008304600290810b810b608080850191909152600160681b909404810b900b60a0830152958c013560c0820152938b013560e0850152908a01356101008401528901356101208301529290611255906135cd565b6001870154939a509198509650915060009061128f9030906a01000000000000000000008104600290810b91600160681b9004900b6134b9565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016112c0919061596b565b60a06040518083038186803b1580156112d857600080fd5b505afa1580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131091906155ee565b5050925092505061134c866002015483038760010160109054906101000a90046001600160801b03166001600160801b0316600160801b613513565b6004870180546001600160801b0380821690930183166fffffffffffffffffffffffffffffffff199091161790556003870154600188015461139c9291840391600160801b918290041690613513565b6004870180546001600160801b03600160801b80830482169094018116840291811691909117909155600288018490556003880183905560018801805483810483168e018316909302929091169190911790556040518b35907f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f90611426908d908d908d90615b3f565b60405180910390a2505050505050509193909250565b61144d611447613293565b8261331b565b6114885760405162461bcd60e51b8152600401808060200182810382526031815260200180615f456031913960400191505060405180910390fd5b610974838383613808565b6001600160a01b03821660009081526001602052604081206114b59083613954565b90505b92915050565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061154f613960565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b600e55565b610974838383604051806020016040528060008152506129c1565b806115cb338261331b565b6115e75760405162461bcd60e51b815260040161086e906159c6565b6000828152600c602052604090206001810154600160801b90046001600160801b0316158015611622575060048101546001600160801b0316155b801561164057506004810154600160801b90046001600160801b0316155b61165c5760405162461bcd60e51b815260040161086e90615ac8565b6000838152600c602052604081208181556001810182905560028101829055600381018290556004015561097483613964565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e4810183905290516001600160a01b03881691638fcbaf0c9161010480830192600092919082900301818387803b15801561172257600080fd5b505af1158015611736573d6000803e3d6000fd5b50505050505050505050565b6000611750828401846154e7565b90506117807f00000000000000000000000000000000000000000000000000000000000000008260000151613a31565b50841561179b57805151602082015161179b91903388613a54565b83156117b9576117b981600001516020015182602001513387613a54565b5050505050565b6000806117ce600284613be4565b509392505050565b60006114b882604051806060016040528060298152602001615eb06029913960029190613c02565b606090565b60006001600160a01b03821661184a5760405162461bcd60e51b815260040180806020018281038252602a815260200180615e86602a913960400191505060405180910390fd5b6001600160a01b03821660009081526001602052604090206114b8906135c2565b836118746133b7565b11156118c7576040805162461bcd60e51b815260206004820152600e60248201527f5065726d69742065787069726564000000000000000000000000000000000000604482015290519081900360640190fd5b60006118d16114e2565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad88886118fd81613c0f565b604080516020808201969096526001600160a01b03909416848201526060840192909252608083015260a08083018a90528151808403909101815260c0830182528051908401207f190100000000000000000000000000000000000000000000000000000000000060e084015260e2830194909452610102808301949094528051808303909401845261012290910190528151910120905060006119a0876117d6565b9050806001600160a01b0316886001600160a01b031614156119f35760405162461bcd60e51b8152600401808060200182810382526027815260200180615db16027913960400191505060405180910390fd5b6119fc81613c4e565b15611bd7576040805160208082018790528183018690527fff0000000000000000000000000000000000000000000000000000000000000060f889901b16606083015282516041818403018152606183018085527f1626ba7e0000000000000000000000000000000000000000000000000000000090526065830186815260858401948552815160a585015281516001600160a01b03871695631626ba7e958995919260c59091019185019080838360005b83811015611ac6578181015183820152602001611aae565b50505050905090810190601f168015611af35780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611b1157600080fd5b505afa158015611b25573d6000803e3d6000fd5b505050506040513d6020811015611b3b57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e0000000000000000000000000000000000000000000000000000000014611bd2576040805162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b611d03565b600060018387878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611c33573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611c9b576040805162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e6174757265000000000000000000000000000000604482015290519081900360640190fd5b816001600160a01b0316816001600160a01b031614611d01576040805162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b505b611d0d8888613297565b5050505050505050565b60008060008084610140013580611d2c6133b7565b1115611d7f576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b604080516101408101909152600090611e4b9080611da060208b018b6150f1565b6001600160a01b03168152602001896020016020810190611dc191906150f1565b6001600160a01b03168152602001611ddf60608b0160408c016156e0565b62ffffff168152306020820152604001611dff60808b0160608c01615428565b60020b8152602001611e1760a08b0160808c01615428565b60020b81526020018960a0013581526020018960c0013581526020018960e0013581526020018961010001358152506135cd565b92975090955093509050611ebf611e6a61014089016101208a016150f1565b600d80547fffffffffffffffffffff000000000000000000000000000000000000000000008116600175ffffffffffffffffffffffffffffffffffffffffffff92831690810190921617909155975087613c54565b6000611eea30611ed560808b0160608c01615428565b611ee560a08c0160808d01615428565b6134b9565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401611f1b919061596b565b60a06040518083038186803b158015611f3357600080fd5b505afa158015611f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6b91906155ee565b505092509250506000611fe48560405180606001604052808e6000016020810190611f9691906150f1565b6001600160a01b031681526020018e6020016020810190611fb791906150f1565b6001600160a01b031681526020018e6040016020810190611fd891906156e0565b62ffffff169052613d82565b905060405180610140016040528060006bffffffffffffffffffffffff16815260200160006001600160a01b031681526020018269ffffffffffffffffffff1681526020018c606001602081019061203c9190615428565b60020b815260200161205460a08e0160808f01615428565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815250600c60008c815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b03160217905550905050897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a60405161226393929190615b3f565b60405180910390a25050505050509193509193565b7f000000000000000000000000000000000000000000000000000000000000000081565b60078054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561083d5780601f106108125761010080835404028352916020019161083d565b6000818152600c6020908152604080832081516101408101835281546bffffffffffffffffffffffff811682526001600160a01b036c010000000000000000000000009091041693810193909352600181015469ffffffffffffffffffff81169284018390526a01000000000000000000008104600290810b810b810b6060860152600160681b8204810b810b810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e0860152600490920154808316610100860152041661012083015282918291829182918291829182918291829182918291906124065760405162461bcd60e51b815260040161086e90615a91565b6000600b6000836040015169ffffffffffffffffffff1669ffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b612534613293565b6001600160a01b0316826001600160a01b0316141561259a576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b80600560006125a7613293565b6001600160a01b0390811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155612609613293565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051600019916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b1580156126b957600080fd5b505afa1580156126cd573d6000803e3d6000fd5b505050506040513d60208110156126e357600080fd5b505110156126f9576126f986868686868661168f565b505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561277057600080fd5b505afa158015612784573d6000803e3d6000fd5b505050506040513d602081101561279a57600080fd5b50519050828110156127f3576040805162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015610974577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561285f57600080fd5b505af1158015612873573d6000803e3d6000fd5b505050506109748282613ed2565b60608167ffffffffffffffff8111801561289a57600080fd5b506040519080825280602002602001820160405280156128ce57816020015b60608152602001906001900390816128b95790505b50905060005b828110156129ba57600080308686858181106128ec57fe5b90506020028101906128fe9190615c31565b60405161290c929190615814565b600060405180830381855af49150503d8060008114612947576040519150601f19603f3d011682016040523d82523d6000602084013e61294c565b606091505b5091509150816129985760448151101561296557600080fd5b6004810190508080602001905181019061297f9190615444565b60405162461bcd60e51b815260040161086e91906159b3565b808484815181106129a557fe5b602090810291909101015250506001016128d4565b5092915050565b6129d26129cc613293565b8361331b565b612a0d5760405162461bcd60e51b8152600401808060200182810382526031815260200180615f456031913960400191505060405180910390fd5b612a1984848484613fdb565b50505050565b604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152905186916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b158015612a8757600080fd5b505afa158015612a9b573d6000803e3d6000fd5b505050506040513d6020811015612ab157600080fd5b505110156126f9576126f9868686868686612cdd565b7f000000000000000000000000000000000000000000000000000000000000000081565b4715612afb57612afb3347613ed2565b565b6060612b0882613286565b612b1157600080fd5b6040517fe9dc63750000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e9dc637590612b789030908690600401615974565b60006040518083038186803b158015612b9057600080fd5b505afa158015612ba4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114b89190810190615444565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612c1b57600080fd5b505afa158015612c2f573d6000803e3d6000fd5b505050506040513d6020811015612c4557600080fd5b5051905082811015612c9e576040805162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015612a1957612a1984838361402d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c4810183905290516001600160a01b0388169163d505accf9160e480830192600092919082900301818387803b15801561172257600080fd5b6000808235612d77338261331b565b612d935760405162461bcd60e51b815260040161086e906159c6565b6000612da560608601604087016155a4565b6001600160801b03161180612dd257506000612dc760808601606087016155a4565b6001600160801b0316115b612ddb57600080fd5b600080612dee60408701602088016150f1565b6001600160a01b031614612e1157612e0c60408601602087016150f1565b612e13565b305b85356000908152600c6020908152604080832060018082015469ffffffffffffffffffff168552600b8452828520835160608101855281546001600160a01b039081168252919092015490811694820194909452600160a01b90930462ffffff169183019190915292935090612ea97f0000000000000000000000000000000000000000000000000000000000000000836133bd565b600484015460018501549192506001600160801b0380821692600160801b92839004821692900416156130c65760018501546040517fa34123a70000000000000000000000000000000000000000000000000000000081526001600160a01b0385169163a34123a791612f40916a01000000000000000000008104600290810b92600160681b909204900b9060009060040161598d565b6040805180830381600087803b158015612f5957600080fd5b505af1158015612f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f919190615736565b5050600185015460009081906001600160a01b0386169063514ea4bf90612fd69030906a01000000000000000000008104600290810b91600160681b9004900b6134b9565b6040518263ffffffff1660e01b8152600401612ff2919061596b565b60a06040518083038186803b15801561300a57600080fd5b505afa15801561301e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304291906155ee565b5050925092505061307e876002015483038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b613513565b840193506130b7876003015482038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b613513565b60028801929092556003870155015b6000806001600160801b0384166130e360608e0160408f016155a4565b6001600160801b0316116131065761310160608d0160408e016155a4565b613108565b835b836001600160801b03168d606001602081019061312591906155a4565b6001600160801b0316116131485761314360808e0160608f016155a4565b61314a565b835b60018901546040517f4f1eb3d80000000000000000000000000000000000000000000000000000000081529294509092506001600160a01b03871691634f1eb3d8916131bd918c916a01000000000000000000008104600290810b92600160681b909204900b908890889060040161587b565b6040805180830381600087803b1580156131d657600080fd5b505af11580156131ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320e91906155c0565b6004890180546fffffffffffffffffffffffffffffffff196001600160801b03918216600160801b878a0384160217168689038216179091556040519281169d50169a508c35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190610dcf908b90869086906158b8565b60006114b86002836141bd565b3390565b6000818152600c6020526040902080546bffffffffffffffffffffffff166c010000000000000000000000006001600160a01b0385169081029190911790915581906132e2826117d6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061332682613286565b6133615760405162461bcd60e51b815260040180806020018281038252602c815260200180615e22602c913960400191505060405180910390fd5b600061336c836117d6565b9050806001600160a01b0316846001600160a01b031614806133a75750836001600160a01b031661339c84610847565b6001600160a01b0316145b806110ea57506110ea8185612caf565b600e5490565b600081602001516001600160a01b031682600001516001600160a01b0316106133e557600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b6bffffffffffffffffffffffff191660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516bffffffffffffffffffffffff19606086901b16602080830191909152600285810b60e890811b60348501529085900b901b60378301528251601a818403018152603a90920190925280519101205b9392505050565b6000808060001985870986860292508281109083900303905080613549576000841161353e57600080fd5b50829004905061350c565b80841161355557600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60006114b8826141c9565b6000806000806000604051806060016040528087600001516001600160a01b0316815260200187602001516001600160a01b03168152602001876040015162ffffff16815250905061363f7f0000000000000000000000000000000000000000000000000000000000000000826133bd565b91506000826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561367c57600080fd5b505afa158015613690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b4919061564f565b505050505050905060006136cb88608001516141cd565b905060006136dc8960a001516141cd565b90506136f38383838c60c001518d60e0015161451b565b9750505050816001600160a01b0316633c8a7d8d876060015188608001518960a00151896040518060400160405280888152602001336001600160a01b03168152506040516020016137459190615aff565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401613774959493929190615838565b6040805180830381600087803b15801561378d57600080fd5b505af11580156137a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c59190615736565b610100880151919550935084108015906137e457508561012001518310155b6138005760405162461bcd60e51b815260040161086e90615a5a565b509193509193565b826001600160a01b031661381b826117d6565b6001600160a01b0316146138605760405162461bcd60e51b8152600401808060200182810382526029815260200180615efb6029913960400191505060405180910390fd5b6001600160a01b0382166138a55760405162461bcd60e51b8152600401808060200182810382526024815260200180615dd86024913960400191505060405180910390fd5b6138b0838383610974565b6138bb600082613297565b6001600160a01b03831660009081526001602052604090206138dd90826145df565b506001600160a01b038216600090815260016020526040902061390090826145eb565b5061390d600282846145f7565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006114b5838361460d565b4690565b600061396f826117d6565b905061397d81600084610974565b613988600083613297565b60008281526008602052604090205460026000196101006001841615020190911604156139c65760008281526008602052604081206139c691615061565b6001600160a01b03811660009081526001602052604090206139e890836145df565b506139f4600283614671565b5060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000613a3d83836133bd565b9050336001600160a01b038216146114b857600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015613a955750804710155b15613bb7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613af557600080fd5b505af1158015613b09573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613b8557600080fd5b505af1158015613b99573d6000803e3d6000fd5b505050506040513d6020811015613baf57600080fd5b50612a199050565b6001600160a01b038316301415613bd857613bd384838361402d565b612a19565b612a198484848461467d565b6000808080613bf38686614815565b909450925050505b9250929050565b60006110ea848484614890565b6000908152600c6020526040902080546bffffffffffffffffffffffff19811660016bffffffffffffffffffffffff9283169081019092161790915590565b3b151590565b6001600160a01b038216613caf576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613cb881613286565b15613d0a576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613d1660008383610974565b6001600160a01b0382166000908152600160205260409020613d3890826145eb565b50613d45600282846145f7565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b0382166000908152600a602052604090205469ffffffffffffffffffff16806114b85750600d8054600169ffffffffffffffffffff76010000000000000000000000000000000000000000000080840482168381019092160275ffffffffffffffffffffffffffffffffffffffffffff909316929092179092556001600160a01b038085166000908152600a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001686179055848352600b825291829020865181549085167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617825591870151950180549287015162ffffff16600160a01b027fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff969094169290911691909117939093161790915592915050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613f1e5780518252601f199092019160209182019101613eff565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613f80576040519150601f19603f3d011682016040523d82523d6000602084013e613f85565b606091505b5050905080610974576040805162461bcd60e51b815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b613fe6848484613808565b613ff28484848461495a565b612a195760405162461bcd60e51b8152600401808060200182810382526032815260200180615d7f6032913960400191505060405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b602083106140d75780518252601f1990920191602091820191016140b8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614139576040519150601f19603f3d011682016040523d82523d6000602084013e61413e565b606091505b509150915081801561416c57508051158061416c575080806020019051602081101561416957600080fd5b50515b6117b9576040805162461bcd60e51b815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006114b58383614b36565b5490565b60008060008360020b126141e4578260020b6141ec565b8260020b6000035b9050620d89e8811115614246576040805162461bcd60e51b815260206004820152600160248201527f5400000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006001821661425a57600160801b61426c565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156142a0576ffff97272373d413259a46990580e213a0260801c5b60048216156142bf576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156142de576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156142fd576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561431c576fff973b41fa98c081472e6896dfb254c00260801c5b604082161561433b576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561435a576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561437a576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561439a576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156143ba576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156143da576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156143fa576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561441a576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561443a576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561445a576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561447b576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561449b576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156144ba576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156144d7576b048a170391f7dc42444e8fa20260801c5b60008460020b13156144f25780600019816144ee57fe5b0490505b640100000000810615614506576001614509565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b0316111561453b579293925b846001600160a01b0316866001600160a01b0316116145665761455f858585614b4e565b90506145d6565b836001600160a01b0316866001600160a01b031610156145c857600061458d878686614b4e565b9050600061459c878986614bba565b9050806001600160801b0316826001600160801b0316106145bd57806145bf565b815b925050506145d6565b6145d3858584614bba565b90505b95945050505050565b60006114b58383614c00565b60006114b58383614cc6565b60006110ea84846001600160a01b038516614d10565b8154600090821061464f5760405162461bcd60e51b8152600401808060200182810382526022815260200180615d5d6022913960400191505060405180910390fd5b82600001828154811061465e57fe5b9060005260206000200154905092915050565b60006114b58383614da7565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b6020831061472f5780518252601f199092019160209182019101614710565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614791576040519150601f19603f3d011682016040523d82523d6000602084013e614796565b606091505b50915091508180156147c45750805115806147c457508080602001905160208110156147c157600080fd5b50515b6126f9576040805162461bcd60e51b815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8154600090819083106148595760405162461bcd60e51b8152600401808060200182810382526022815260200180615ed96022913960400191505060405180910390fd5b600084600001848154811061486a57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b6000828152600184016020526040812054828161492b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156148f05781810151838201526020016148d8565b50505050905090810190601f16801561491d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061493e57fe5b9060005260206000209060020201600101549150509392505050565b600061496e846001600160a01b0316613c4e565b61497a575060016110ea565b6000614acb7f150b7a02000000000000000000000000000000000000000000000000000000006149a8613293565b88878760405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614a0f5781810151838201526020016149f7565b50505050905090810190601f168015614a3c5780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001615d7f603291396001600160a01b0388169190614e7b565b90506000818060200190516020811015614ae457600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b60009081526001919091016020526040902054151590565b6000826001600160a01b0316846001600160a01b03161115614b6e579192915b6000614b9a856001600160a01b0316856001600160a01b03166c01000000000000000000000000613513565b90506145d6614bb584838888036001600160a01b0316613513565b614e8a565b6000826001600160a01b0316846001600160a01b03161115614bda579192915b6110ea614bb5836c010000000000000000000000008787036001600160a01b0316613513565b60008181526001830160205260408120548015614cbc5783546000198083019190810190600090879083908110614c3357fe5b9060005260206000200154905080876000018481548110614c5057fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080614c8057fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506114b8565b60009150506114b8565b6000614cd28383614b36565b614d08575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556114b8565b5060006114b8565b600082815260018401602052604081205480614d7557505060408051808201825283815260208082018481528654600181810189556000898152848120955160029093029095019182559151908201558654868452818801909252929091205561350c565b82856000016001830381548110614d8857fe5b906000526020600020906002020160010181905550600091505061350c565b60008181526001830160205260408120548015614cbc5783546000198083019190810190600090879083908110614dda57fe5b9060005260206000209060020201905080876000018481548110614dfa57fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080614e3957fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506114b89350505050565b60606110ea8484600085614ea0565b806001600160801b03811681146107ac57600080fd5b606082471015614ee15760405162461bcd60e51b8152600401808060200182810382526026815260200180615dfc6026913960400191505060405180910390fd5b614eea85613c4e565b614f3b576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310614f795780518252601f199092019160209182019101614f5a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614fdb576040519150601f19603f3d011682016040523d82523d6000602084013e614fe0565b606091505b5091509150614ff0828286614ffb565b979650505050505050565b6060831561500a57508161350c565b82511561501a5782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156148f05781810151838201526020016148d8565b50805460018160011615610100020316600290046000825580601f1061508757506150a5565b601f0160209004906000526020600020908101906150a591906150a8565b50565b5b808211156150bd57600081556001016150a9565b5090565b80356107ac81615d06565b805161ffff811681146107ac57600080fd5b803562ffffff811681146107ac57600080fd5b600060208284031215615102578081fd5b813561350c81615d06565b6000806040838503121561511f578081fd5b823561512a81615d06565b9150602083013561513a81615d06565b809150509250929050565b6000806000806080858703121561515a578182fd5b843561516581615d06565b9350602085013561517581615d06565b9250615183604086016150de565b9150606085013561519381615d06565b939692955090935050565b6000806000606084860312156151b2578081fd5b83356151bd81615d06565b925060208401356151cd81615d06565b929592945050506040919091013590565b600080600080608085870312156151f3578182fd5b84356151fe81615d06565b9350602085013561520e81615d06565b925060408501359150606085013567ffffffffffffffff811115615230578182fd5b8501601f81018713615240578182fd5b803561525361524e82615cb8565b615c94565b818152886020838501011115615267578384fd5b81602084016020830137908101602001929092525092959194509250565b60008060408385031215615297578182fd5b82356152a281615d06565b9150602083013561513a81615d1b565b600080604083850312156152c4578182fd5b82356152cf81615d06565b946020939093013593505050565b6000806000606084860312156152f1578081fd5b83356152fc81615d06565b925060208401359150604084013561531381615d06565b809150509250925092565b60008060008060008060c08789031215615336578384fd5b863561534181615d06565b95506020870135945060408701359350606087013561535f81615d4d565b9598949750929560808101359460a0909101359350915050565b6000806020838503121561538b578182fd5b823567ffffffffffffffff808211156153a2578384fd5b818501915085601f8301126153b5578384fd5b8135818111156153c3578485fd5b86602080830285010111156153d6578485fd5b60209290920196919550909350505050565b6000602082840312156153f9578081fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461350c578182fd5b600060208284031215615439578081fd5b813561350c81615d29565b600060208284031215615455578081fd5b815167ffffffffffffffff81111561546b578182fd5b8201601f8101841361547b578182fd5b805161548961524e82615cb8565b81815285602083850101111561549d578384fd5b6145d6826020830160208601615cda565b6000608082840312156154bf578081fd5b50919050565b600060a082840312156154bf578081fd5b600060c082840312156154bf578081fd5b600081830360808112156154f9578182fd5b6040516040810167ffffffffffffffff828210818311171561551757fe5b816040526060841215615528578485fd5b60a083019350818410818511171561553c57fe5b50826040528435925061554e83615d06565b91825260208401359161556083615d06565b826060830152615572604086016150de565b60808301528152615585606085016150c1565b6020820152949350505050565b600061016082840312156154bf578081fd5b6000602082840312156155b5578081fd5b813561350c81615d38565b600080604083850312156155d2578182fd5b82516155dd81615d38565b602084015190925061513a81615d38565b600080600080600060a08688031215615605578283fd5b855161561081615d38565b809550506020860151935060408601519250606086015161563081615d38565b608087015190925061564181615d38565b809150509295509295909350565b600080600080600080600060e0888a031215615669578485fd5b875161567481615d06565b602089015190975061568581615d29565b9550615693604089016150cc565b94506156a1606089016150cc565b93506156af608089016150cc565b925060a08801516156bf81615d4d565b60c08901519092506156d081615d1b565b8091505092959891949750929550565b6000602082840312156156f1578081fd5b6114b5826150de565b60006020828403121561570b578081fd5b5035919050565b60008060408385031215615724578182fd5b82359150602083013561513a81615d06565b60008060408385031215615748578182fd5b505080516020909101519092909150565b6000806000806060858703121561576e578182fd5b8435935060208501359250604085013567ffffffffffffffff80821115615793578384fd5b818701915087601f8301126157a6578384fd5b8135818111156157b4578485fd5b8860208285010111156157c5578485fd5b95989497505060200194505050565b600081518084526157ec816020860160208601615cda565b601f01601f19169290920160200192915050565b60020b9052565b6001600160801b03169052565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b60006001600160a01b03871682528560020b60208301528460020b60408301526001600160801b038416606083015260a06080830152614ff060a08301846157d4565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6001600160a01b039390931683526001600160801b03918216602084015216604082015260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615953577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526159418583516157d4565b94509285019290850190600101615907565b5092979650505050505050565b901515815260200190565b90815260200190565b6001600160a01b03929092168252602082015260400190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b6000602082526114b560208301846157d4565b6020808252600c908201527f4e6f7420617070726f7665640000000000000000000000000000000000000000604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f507269636520736c69707061676520636865636b000000000000000000000000604082015260600190565b60208082526010908201527f496e76616c696420746f6b656e20494400000000000000000000000000000000604082015260600190565b6020808252600b908201527f4e6f7420636c6561726564000000000000000000000000000000000000000000604082015260600190565b815180516001600160a01b03908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6001600160801b039390931683526020830191909152604082015260600190565b9384526001600160801b039290921660208401526040830152606082015260800190565b918252602082015260400190565b6bffffffffffffffffffffffff8d1681526001600160a01b038c811660208301528b811660408301528a16606082015262ffffff89166080820152600288900b60a08201526101808101615be960c0830189615800565b615bf660e0830188615807565b8561010083015284610120830152615c12610140830185615807565b615c20610160830184615807565b9d9c50505050505050505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615c65578283fd5b83018035915067ffffffffffffffff821115615c7f578283fd5b602001915036819003821315613bfb57600080fd5b60405181810167ffffffffffffffff81118282101715615cb057fe5b604052919050565b600067ffffffffffffffff821115615ccc57fe5b50601f01601f191660200190565b60005b83811015615cf5578181015183820152602001615cdd565b83811115612a195750506000910152565b6001600160a01b03811681146150a557600080fd5b80151581146150a557600080fd5b8060020b81146150a557600080fd5b6001600160801b03811681146150a557600080fd5b60ff811681146150a557600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732315065726d69743a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e7366657220746f20746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a164736f6c6343000706000a",
  "deployedBytecode": "0x6080604052600436106102a45760003560e01c80636c0360eb1161016e578063ac9650d8116100cb578063c87b56dd1161007f578063e985e9c511610064578063e985e9c514610730578063f3995c6714610750578063fc6f78651461076357610328565b8063c87b56dd146106fd578063df2ab5bb1461071d57610328565b8063c2e3140a116100b0578063c2e3140a146106cd578063c45a0155146106e0578063c53af304146106f557610328565b8063ac9650d81461068d578063b88d4fde146106ad57610328565b806395d89b4111610122578063a22cb46511610107578063a22cb46514610647578063a4a78f0c14610667578063a98ce37f1461067a57610328565b806395d89b41146105fa57806399fbab881461060f57610328565b80637ac2ff7b116101535780637ac2ff7b146105af57806388316456146105c257806390793ea8146105e557610328565b80636c0360eb1461057a57806370a082311461058f57610328565b80632f745c591161021c57806342966c68116101d05780634cb42d2d116101b55780634cb42d2d1461051a5780634f6ccce71461053a5780636352211e1461055a57610328565b806342966c68146104f45780634659a4941461050757610328565b80633644e515116102015780633644e5151461049f5780633beb26c4146104b457806342842e0e146104d457610328565b80632f745c591461046a57806330adf81f1461048a57610328565b80630c49ccbe1161027357806318160ddd1161025857806318160ddd14610406578063219f5d171461042857806323b872dd1461044a57610328565b80630c49ccbe146103d257806313ead562146103f357610328565b806301ffc9a71461032d57806306fdde0314610363578063081812fc14610385578063095ea7b3146103b257610328565b3661032857336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610326576040805162461bcd60e51b815260206004820152600860248201527f4e6f742053414d42000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561033957600080fd5b5061034d6103483660046153e8565b610776565b60405161035a9190615960565b60405180910390f35b34801561036f57600080fd5b506103786107b1565b60405161035a91906159b3565b34801561039157600080fd5b506103a56103a03660046156fa565b610847565b60405161035a9190615824565b3480156103be57600080fd5b506103266103cd3660046152b2565b6108a3565b6103e56103e03660046154c5565b610979565b60405161035a929190615b84565b6103a5610401366004615145565b610de5565b34801561041257600080fd5b5061041b6110f2565b60405161035a919061596b565b61043b6104363660046154d6565b611103565b60405161035a93929190615b3f565b34801561045657600080fd5b5061032661046536600461519e565b61143c565b34801561047657600080fd5b5061041b6104853660046152b2565b611493565b34801561049657600080fd5b5061041b6114be565b3480156104ab57600080fd5b5061041b6114e2565b3480156104c057600080fd5b506103266104cf3660046156fa565b6115a0565b3480156104e057600080fd5b506103266104ef36600461519e565b6115a5565b6103266105023660046156fa565b6115c0565b61032661051536600461531e565b61168f565b34801561052657600080fd5b50610326610535366004615759565b611742565b34801561054657600080fd5b5061041b6105553660046156fa565b6117c0565b34801561056657600080fd5b506103a56105753660046156fa565b6117d6565b34801561058657600080fd5b506103786117fe565b34801561059b57600080fd5b5061041b6105aa3660046150f1565b611803565b6103266105bd36600461531e565b61186b565b6105d56105d0366004615592565b611d17565b60405161035a9493929190615b60565b3480156105f157600080fd5b506103a5612278565b34801561060657600080fd5b5061037861229c565b34801561061b57600080fd5b5061062f61062a3660046156fa565b6122fd565b60405161035a9c9b9a99989796959493929190615b92565b34801561065357600080fd5b50610326610662366004615285565b61252c565b61032661067536600461531e565b61264f565b610326610688366004615712565b612701565b6106a061069b366004615379565b612881565b60405161035a91906158e2565b3480156106b957600080fd5b506103266106c83660046151de565b6129c1565b6103266106db36600461531e565b612a1f565b3480156106ec57600080fd5b506103a5612ac7565b610326612aeb565b34801561070957600080fd5b506103786107183660046156fa565b612afd565b61032661072b3660046152dd565b612bcc565b34801561073c57600080fd5b5061034d61074b36600461510d565b612caf565b61032661075e36600461531e565b612cdd565b6103e56107713660046154ae565b612d68565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b60068054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561083d5780601f106108125761010080835404028352916020019161083d565b820191906000526020600020905b81548152906001019060200180831161082057829003601f168201915b5050505050905090565b600061085282613286565b6108775760405162461bcd60e51b815260040161086e906159fd565b60405180910390fd5b506000908152600c60205260409020546c0100000000000000000000000090046001600160a01b031690565b60006108ae826117d6565b9050806001600160a01b0316836001600160a01b031614156109015760405162461bcd60e51b8152600401808060200182810382526021815260200180615f246021913960400191505060405180910390fd5b806001600160a01b0316610913613293565b6001600160a01b0316148061092f575061092f8161074b613293565b61096a5760405162461bcd60e51b8152600401808060200182810382526038815260200180615e4e6038913960400191505060405180910390fd5b6109748383613297565b505050565b6000808235610988338261331b565b6109a45760405162461bcd60e51b815260040161086e906159c6565b8360800135806109b26133b7565b1115610a05576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b6000610a1760408701602088016155a4565b6001600160801b031611610a2a57600080fd5b84356000908152600c602090815260409182902060018101549092600160801b9091046001600160801b031691610a659189019089016155a4565b6001600160801b0316816001600160801b03161015610a8357600080fd5b60018281015469ffffffffffffffffffff166000908152600b60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b90910462ffffff1690830152610b077f0000000000000000000000000000000000000000000000000000000000000000836133bd565b60018501549091506001600160a01b0382169063a34123a7906a01000000000000000000008104600290810b91600160681b9004900b610b4d60408e0160208f016155a4565b6040518463ffffffff1660e01b8152600401610b6b9392919061598d565b6040805180830381600087803b158015610b8457600080fd5b505af1158015610b98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbc9190615736565b909850965060408901358810801590610bd9575088606001358710155b610bf55760405162461bcd60e51b815260040161086e90615a5a565b6001840154600090610c259030906a01000000000000000000008104600290810b91600160681b9004900b6134b9565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401610c56919061596b565b60a06040518083038186803b158015610c6e57600080fd5b505afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906155ee565b50509250925050610ccb87600201548303876001600160801b0316600160801b613513565b6004880180546fffffffffffffffffffffffffffffffff198116928e016001600160801b039182160181169290921790556003880154610d1591908303908816600160801b613513565b6004880180546001600160801b03808216938e01600160801b9283900482160116029190911790556002870182905560038701819055610d5b60408d0160208e016155a4565b86038760010160106101000a8154816001600160801b0302191690836001600160801b031602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d6020016020810190610dbe91906155a4565b8d8d604051610dcf93929190615b3f565b60405180910390a2505050505050505050915091565b6000836001600160a01b0316856001600160a01b031610610e0557600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631698ee828686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff168152602001935050505060206040518083038186803b158015610e9057600080fd5b505afa158015610ea4573d6000803e3d6000fd5b505050506040513d6020811015610eba57600080fd5b505190506001600160a01b038116611009577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a16712958686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff1681526020019350505050602060405180830381600087803b158015610f5957600080fd5b505af1158015610f6d573d6000803e3d6000fd5b505050506040513d6020811015610f8357600080fd5b5051604080517ff637731d0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b158015610fec57600080fd5b505af1158015611000573d6000803e3d6000fd5b505050506110ea565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561104457600080fd5b505afa158015611058573d6000803e3d6000fd5b505050506040513d60e081101561106e57600080fd5b505190506001600160a01b0381166110e857816001600160a01b031663f637731d846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156110cf57600080fd5b505af11580156110e3573d6000803e3d6000fd5b505050505b505b949350505050565b60006110fe60026135c2565b905090565b60008060008360a00135806111166133b7565b1115611169576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b84356000908152600c6020908152604080832060018082015469ffffffffffffffffffff81168652600b855283862084516060808201875282546001600160a01b039081168352929094015480831682890190815262ffffff600160a01b9092048216838901908152885161014081018a528451861681529151909416818a01529251168287015230828501526a01000000000000000000008304600290810b810b608080850191909152600160681b909404810b900b60a0830152958c013560c0820152938b013560e0850152908a01356101008401528901356101208301529290611255906135cd565b6001870154939a509198509650915060009061128f9030906a01000000000000000000008104600290810b91600160681b9004900b6134b9565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016112c0919061596b565b60a06040518083038186803b1580156112d857600080fd5b505afa1580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131091906155ee565b5050925092505061134c866002015483038760010160109054906101000a90046001600160801b03166001600160801b0316600160801b613513565b6004870180546001600160801b0380821690930183166fffffffffffffffffffffffffffffffff199091161790556003870154600188015461139c9291840391600160801b918290041690613513565b6004870180546001600160801b03600160801b80830482169094018116840291811691909117909155600288018490556003880183905560018801805483810483168e018316909302929091169190911790556040518b35907f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f90611426908d908d908d90615b3f565b60405180910390a2505050505050509193909250565b61144d611447613293565b8261331b565b6114885760405162461bcd60e51b8152600401808060200182810382526031815260200180615f456031913960400191505060405180910390fd5b610974838383613808565b6001600160a01b03821660009081526001602052604081206114b59083613954565b90505b92915050565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061154f613960565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b600e55565b610974838383604051806020016040528060008152506129c1565b806115cb338261331b565b6115e75760405162461bcd60e51b815260040161086e906159c6565b6000828152600c602052604090206001810154600160801b90046001600160801b0316158015611622575060048101546001600160801b0316155b801561164057506004810154600160801b90046001600160801b0316155b61165c5760405162461bcd60e51b815260040161086e90615ac8565b6000838152600c602052604081208181556001810182905560028101829055600381018290556004015561097483613964565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e4810183905290516001600160a01b03881691638fcbaf0c9161010480830192600092919082900301818387803b15801561172257600080fd5b505af1158015611736573d6000803e3d6000fd5b50505050505050505050565b6000611750828401846154e7565b90506117807f00000000000000000000000000000000000000000000000000000000000000008260000151613a31565b50841561179b57805151602082015161179b91903388613a54565b83156117b9576117b981600001516020015182602001513387613a54565b5050505050565b6000806117ce600284613be4565b509392505050565b60006114b882604051806060016040528060298152602001615eb06029913960029190613c02565b606090565b60006001600160a01b03821661184a5760405162461bcd60e51b815260040180806020018281038252602a815260200180615e86602a913960400191505060405180910390fd5b6001600160a01b03821660009081526001602052604090206114b8906135c2565b836118746133b7565b11156118c7576040805162461bcd60e51b815260206004820152600e60248201527f5065726d69742065787069726564000000000000000000000000000000000000604482015290519081900360640190fd5b60006118d16114e2565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad88886118fd81613c0f565b604080516020808201969096526001600160a01b03909416848201526060840192909252608083015260a08083018a90528151808403909101815260c0830182528051908401207f190100000000000000000000000000000000000000000000000000000000000060e084015260e2830194909452610102808301949094528051808303909401845261012290910190528151910120905060006119a0876117d6565b9050806001600160a01b0316886001600160a01b031614156119f35760405162461bcd60e51b8152600401808060200182810382526027815260200180615db16027913960400191505060405180910390fd5b6119fc81613c4e565b15611bd7576040805160208082018790528183018690527fff0000000000000000000000000000000000000000000000000000000000000060f889901b16606083015282516041818403018152606183018085527f1626ba7e0000000000000000000000000000000000000000000000000000000090526065830186815260858401948552815160a585015281516001600160a01b03871695631626ba7e958995919260c59091019185019080838360005b83811015611ac6578181015183820152602001611aae565b50505050905090810190601f168015611af35780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611b1157600080fd5b505afa158015611b25573d6000803e3d6000fd5b505050506040513d6020811015611b3b57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e0000000000000000000000000000000000000000000000000000000014611bd2576040805162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b611d03565b600060018387878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611c33573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611c9b576040805162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e6174757265000000000000000000000000000000604482015290519081900360640190fd5b816001600160a01b0316816001600160a01b031614611d01576040805162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b505b611d0d8888613297565b5050505050505050565b60008060008084610140013580611d2c6133b7565b1115611d7f576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b604080516101408101909152600090611e4b9080611da060208b018b6150f1565b6001600160a01b03168152602001896020016020810190611dc191906150f1565b6001600160a01b03168152602001611ddf60608b0160408c016156e0565b62ffffff168152306020820152604001611dff60808b0160608c01615428565b60020b8152602001611e1760a08b0160808c01615428565b60020b81526020018960a0013581526020018960c0013581526020018960e0013581526020018961010001358152506135cd565b92975090955093509050611ebf611e6a61014089016101208a016150f1565b600d80547fffffffffffffffffffff000000000000000000000000000000000000000000008116600175ffffffffffffffffffffffffffffffffffffffffffff92831690810190921617909155975087613c54565b6000611eea30611ed560808b0160608c01615428565b611ee560a08c0160808d01615428565b6134b9565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401611f1b919061596b565b60a06040518083038186803b158015611f3357600080fd5b505afa158015611f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6b91906155ee565b505092509250506000611fe48560405180606001604052808e6000016020810190611f9691906150f1565b6001600160a01b031681526020018e6020016020810190611fb791906150f1565b6001600160a01b031681526020018e6040016020810190611fd891906156e0565b62ffffff169052613d82565b905060405180610140016040528060006bffffffffffffffffffffffff16815260200160006001600160a01b031681526020018269ffffffffffffffffffff1681526020018c606001602081019061203c9190615428565b60020b815260200161205460a08e0160808f01615428565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815250600c60008c815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b03160217905550905050897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a60405161226393929190615b3f565b60405180910390a25050505050509193509193565b7f000000000000000000000000000000000000000000000000000000000000000081565b60078054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561083d5780601f106108125761010080835404028352916020019161083d565b6000818152600c6020908152604080832081516101408101835281546bffffffffffffffffffffffff811682526001600160a01b036c010000000000000000000000009091041693810193909352600181015469ffffffffffffffffffff81169284018390526a01000000000000000000008104600290810b810b810b6060860152600160681b8204810b810b810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e0860152600490920154808316610100860152041661012083015282918291829182918291829182918291829182918291906124065760405162461bcd60e51b815260040161086e90615a91565b6000600b6000836040015169ffffffffffffffffffff1669ffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b612534613293565b6001600160a01b0316826001600160a01b0316141561259a576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b80600560006125a7613293565b6001600160a01b0390811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155612609613293565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051600019916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b1580156126b957600080fd5b505afa1580156126cd573d6000803e3d6000fd5b505050506040513d60208110156126e357600080fd5b505110156126f9576126f986868686868661168f565b505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561277057600080fd5b505afa158015612784573d6000803e3d6000fd5b505050506040513d602081101561279a57600080fd5b50519050828110156127f3576040805162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015610974577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561285f57600080fd5b505af1158015612873573d6000803e3d6000fd5b505050506109748282613ed2565b60608167ffffffffffffffff8111801561289a57600080fd5b506040519080825280602002602001820160405280156128ce57816020015b60608152602001906001900390816128b95790505b50905060005b828110156129ba57600080308686858181106128ec57fe5b90506020028101906128fe9190615c31565b60405161290c929190615814565b600060405180830381855af49150503d8060008114612947576040519150601f19603f3d011682016040523d82523d6000602084013e61294c565b606091505b5091509150816129985760448151101561296557600080fd5b6004810190508080602001905181019061297f9190615444565b60405162461bcd60e51b815260040161086e91906159b3565b808484815181106129a557fe5b602090810291909101015250506001016128d4565b5092915050565b6129d26129cc613293565b8361331b565b612a0d5760405162461bcd60e51b8152600401808060200182810382526031815260200180615f456031913960400191505060405180910390fd5b612a1984848484613fdb565b50505050565b604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152905186916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b158015612a8757600080fd5b505afa158015612a9b573d6000803e3d6000fd5b505050506040513d6020811015612ab157600080fd5b505110156126f9576126f9868686868686612cdd565b7f000000000000000000000000000000000000000000000000000000000000000081565b4715612afb57612afb3347613ed2565b565b6060612b0882613286565b612b1157600080fd5b6040517fe9dc63750000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e9dc637590612b789030908690600401615974565b60006040518083038186803b158015612b9057600080fd5b505afa158015612ba4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114b89190810190615444565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612c1b57600080fd5b505afa158015612c2f573d6000803e3d6000fd5b505050506040513d6020811015612c4557600080fd5b5051905082811015612c9e576040805162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015612a1957612a1984838361402d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c4810183905290516001600160a01b0388169163d505accf9160e480830192600092919082900301818387803b15801561172257600080fd5b6000808235612d77338261331b565b612d935760405162461bcd60e51b815260040161086e906159c6565b6000612da560608601604087016155a4565b6001600160801b03161180612dd257506000612dc760808601606087016155a4565b6001600160801b0316115b612ddb57600080fd5b600080612dee60408701602088016150f1565b6001600160a01b031614612e1157612e0c60408601602087016150f1565b612e13565b305b85356000908152600c6020908152604080832060018082015469ffffffffffffffffffff168552600b8452828520835160608101855281546001600160a01b039081168252919092015490811694820194909452600160a01b90930462ffffff169183019190915292935090612ea97f0000000000000000000000000000000000000000000000000000000000000000836133bd565b600484015460018501549192506001600160801b0380821692600160801b92839004821692900416156130c65760018501546040517fa34123a70000000000000000000000000000000000000000000000000000000081526001600160a01b0385169163a34123a791612f40916a01000000000000000000008104600290810b92600160681b909204900b9060009060040161598d565b6040805180830381600087803b158015612f5957600080fd5b505af1158015612f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f919190615736565b5050600185015460009081906001600160a01b0386169063514ea4bf90612fd69030906a01000000000000000000008104600290810b91600160681b9004900b6134b9565b6040518263ffffffff1660e01b8152600401612ff2919061596b565b60a06040518083038186803b15801561300a57600080fd5b505afa15801561301e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304291906155ee565b5050925092505061307e876002015483038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b613513565b840193506130b7876003015482038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b613513565b60028801929092556003870155015b6000806001600160801b0384166130e360608e0160408f016155a4565b6001600160801b0316116131065761310160608d0160408e016155a4565b613108565b835b836001600160801b03168d606001602081019061312591906155a4565b6001600160801b0316116131485761314360808e0160608f016155a4565b61314a565b835b60018901546040517f4f1eb3d80000000000000000000000000000000000000000000000000000000081529294509092506001600160a01b03871691634f1eb3d8916131bd918c916a01000000000000000000008104600290810b92600160681b909204900b908890889060040161587b565b6040805180830381600087803b1580156131d657600080fd5b505af11580156131ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320e91906155c0565b6004890180546fffffffffffffffffffffffffffffffff196001600160801b03918216600160801b878a0384160217168689038216179091556040519281169d50169a508c35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190610dcf908b90869086906158b8565b60006114b86002836141bd565b3390565b6000818152600c6020526040902080546bffffffffffffffffffffffff166c010000000000000000000000006001600160a01b0385169081029190911790915581906132e2826117d6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061332682613286565b6133615760405162461bcd60e51b815260040180806020018281038252602c815260200180615e22602c913960400191505060405180910390fd5b600061336c836117d6565b9050806001600160a01b0316846001600160a01b031614806133a75750836001600160a01b031661339c84610847565b6001600160a01b0316145b806110ea57506110ea8185612caf565b600e5490565b600081602001516001600160a01b031682600001516001600160a01b0316106133e557600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b6bffffffffffffffffffffffff191660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516bffffffffffffffffffffffff19606086901b16602080830191909152600285810b60e890811b60348501529085900b901b60378301528251601a818403018152603a90920190925280519101205b9392505050565b6000808060001985870986860292508281109083900303905080613549576000841161353e57600080fd5b50829004905061350c565b80841161355557600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60006114b8826141c9565b6000806000806000604051806060016040528087600001516001600160a01b0316815260200187602001516001600160a01b03168152602001876040015162ffffff16815250905061363f7f0000000000000000000000000000000000000000000000000000000000000000826133bd565b91506000826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561367c57600080fd5b505afa158015613690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b4919061564f565b505050505050905060006136cb88608001516141cd565b905060006136dc8960a001516141cd565b90506136f38383838c60c001518d60e0015161451b565b9750505050816001600160a01b0316633c8a7d8d876060015188608001518960a00151896040518060400160405280888152602001336001600160a01b03168152506040516020016137459190615aff565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401613774959493929190615838565b6040805180830381600087803b15801561378d57600080fd5b505af11580156137a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c59190615736565b610100880151919550935084108015906137e457508561012001518310155b6138005760405162461bcd60e51b815260040161086e90615a5a565b509193509193565b826001600160a01b031661381b826117d6565b6001600160a01b0316146138605760405162461bcd60e51b8152600401808060200182810382526029815260200180615efb6029913960400191505060405180910390fd5b6001600160a01b0382166138a55760405162461bcd60e51b8152600401808060200182810382526024815260200180615dd86024913960400191505060405180910390fd5b6138b0838383610974565b6138bb600082613297565b6001600160a01b03831660009081526001602052604090206138dd90826145df565b506001600160a01b038216600090815260016020526040902061390090826145eb565b5061390d600282846145f7565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006114b5838361460d565b4690565b600061396f826117d6565b905061397d81600084610974565b613988600083613297565b60008281526008602052604090205460026000196101006001841615020190911604156139c65760008281526008602052604081206139c691615061565b6001600160a01b03811660009081526001602052604090206139e890836145df565b506139f4600283614671565b5060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000613a3d83836133bd565b9050336001600160a01b038216146114b857600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015613a955750804710155b15613bb7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613af557600080fd5b505af1158015613b09573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613b8557600080fd5b505af1158015613b99573d6000803e3d6000fd5b505050506040513d6020811015613baf57600080fd5b50612a199050565b6001600160a01b038316301415613bd857613bd384838361402d565b612a19565b612a198484848461467d565b6000808080613bf38686614815565b909450925050505b9250929050565b60006110ea848484614890565b6000908152600c6020526040902080546bffffffffffffffffffffffff19811660016bffffffffffffffffffffffff9283169081019092161790915590565b3b151590565b6001600160a01b038216613caf576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613cb881613286565b15613d0a576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613d1660008383610974565b6001600160a01b0382166000908152600160205260409020613d3890826145eb565b50613d45600282846145f7565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b0382166000908152600a602052604090205469ffffffffffffffffffff16806114b85750600d8054600169ffffffffffffffffffff76010000000000000000000000000000000000000000000080840482168381019092160275ffffffffffffffffffffffffffffffffffffffffffff909316929092179092556001600160a01b038085166000908152600a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001686179055848352600b825291829020865181549085167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617825591870151950180549287015162ffffff16600160a01b027fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff969094169290911691909117939093161790915592915050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613f1e5780518252601f199092019160209182019101613eff565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613f80576040519150601f19603f3d011682016040523d82523d6000602084013e613f85565b606091505b5050905080610974576040805162461bcd60e51b815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b613fe6848484613808565b613ff28484848461495a565b612a195760405162461bcd60e51b8152600401808060200182810382526032815260200180615d7f6032913960400191505060405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b602083106140d75780518252601f1990920191602091820191016140b8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614139576040519150601f19603f3d011682016040523d82523d6000602084013e61413e565b606091505b509150915081801561416c57508051158061416c575080806020019051602081101561416957600080fd5b50515b6117b9576040805162461bcd60e51b815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006114b58383614b36565b5490565b60008060008360020b126141e4578260020b6141ec565b8260020b6000035b9050620d89e8811115614246576040805162461bcd60e51b815260206004820152600160248201527f5400000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006001821661425a57600160801b61426c565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156142a0576ffff97272373d413259a46990580e213a0260801c5b60048216156142bf576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156142de576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156142fd576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561431c576fff973b41fa98c081472e6896dfb254c00260801c5b604082161561433b576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561435a576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561437a576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561439a576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156143ba576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156143da576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156143fa576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561441a576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561443a576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561445a576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561447b576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561449b576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156144ba576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156144d7576b048a170391f7dc42444e8fa20260801c5b60008460020b13156144f25780600019816144ee57fe5b0490505b640100000000810615614506576001614509565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b0316111561453b579293925b846001600160a01b0316866001600160a01b0316116145665761455f858585614b4e565b90506145d6565b836001600160a01b0316866001600160a01b031610156145c857600061458d878686614b4e565b9050600061459c878986614bba565b9050806001600160801b0316826001600160801b0316106145bd57806145bf565b815b925050506145d6565b6145d3858584614bba565b90505b95945050505050565b60006114b58383614c00565b60006114b58383614cc6565b60006110ea84846001600160a01b038516614d10565b8154600090821061464f5760405162461bcd60e51b8152600401808060200182810382526022815260200180615d5d6022913960400191505060405180910390fd5b82600001828154811061465e57fe5b9060005260206000200154905092915050565b60006114b58383614da7565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b6020831061472f5780518252601f199092019160209182019101614710565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614791576040519150601f19603f3d011682016040523d82523d6000602084013e614796565b606091505b50915091508180156147c45750805115806147c457508080602001905160208110156147c157600080fd5b50515b6126f9576040805162461bcd60e51b815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8154600090819083106148595760405162461bcd60e51b8152600401808060200182810382526022815260200180615ed96022913960400191505060405180910390fd5b600084600001848154811061486a57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b6000828152600184016020526040812054828161492b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156148f05781810151838201526020016148d8565b50505050905090810190601f16801561491d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061493e57fe5b9060005260206000209060020201600101549150509392505050565b600061496e846001600160a01b0316613c4e565b61497a575060016110ea565b6000614acb7f150b7a02000000000000000000000000000000000000000000000000000000006149a8613293565b88878760405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614a0f5781810151838201526020016149f7565b50505050905090810190601f168015614a3c5780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001615d7f603291396001600160a01b0388169190614e7b565b90506000818060200190516020811015614ae457600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b60009081526001919091016020526040902054151590565b6000826001600160a01b0316846001600160a01b03161115614b6e579192915b6000614b9a856001600160a01b0316856001600160a01b03166c01000000000000000000000000613513565b90506145d6614bb584838888036001600160a01b0316613513565b614e8a565b6000826001600160a01b0316846001600160a01b03161115614bda579192915b6110ea614bb5836c010000000000000000000000008787036001600160a01b0316613513565b60008181526001830160205260408120548015614cbc5783546000198083019190810190600090879083908110614c3357fe5b9060005260206000200154905080876000018481548110614c5057fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080614c8057fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506114b8565b60009150506114b8565b6000614cd28383614b36565b614d08575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556114b8565b5060006114b8565b600082815260018401602052604081205480614d7557505060408051808201825283815260208082018481528654600181810189556000898152848120955160029093029095019182559151908201558654868452818801909252929091205561350c565b82856000016001830381548110614d8857fe5b906000526020600020906002020160010181905550600091505061350c565b60008181526001830160205260408120548015614cbc5783546000198083019190810190600090879083908110614dda57fe5b9060005260206000209060020201905080876000018481548110614dfa57fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080614e3957fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506114b89350505050565b60606110ea8484600085614ea0565b806001600160801b03811681146107ac57600080fd5b606082471015614ee15760405162461bcd60e51b8152600401808060200182810382526026815260200180615dfc6026913960400191505060405180910390fd5b614eea85613c4e565b614f3b576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310614f795780518252601f199092019160209182019101614f5a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614fdb576040519150601f19603f3d011682016040523d82523d6000602084013e614fe0565b606091505b5091509150614ff0828286614ffb565b979650505050505050565b6060831561500a57508161350c565b82511561501a5782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156148f05781810151838201526020016148d8565b50805460018160011615610100020316600290046000825580601f1061508757506150a5565b601f0160209004906000526020600020908101906150a591906150a8565b50565b5b808211156150bd57600081556001016150a9565b5090565b80356107ac81615d06565b805161ffff811681146107ac57600080fd5b803562ffffff811681146107ac57600080fd5b600060208284031215615102578081fd5b813561350c81615d06565b6000806040838503121561511f578081fd5b823561512a81615d06565b9150602083013561513a81615d06565b809150509250929050565b6000806000806080858703121561515a578182fd5b843561516581615d06565b9350602085013561517581615d06565b9250615183604086016150de565b9150606085013561519381615d06565b939692955090935050565b6000806000606084860312156151b2578081fd5b83356151bd81615d06565b925060208401356151cd81615d06565b929592945050506040919091013590565b600080600080608085870312156151f3578182fd5b84356151fe81615d06565b9350602085013561520e81615d06565b925060408501359150606085013567ffffffffffffffff811115615230578182fd5b8501601f81018713615240578182fd5b803561525361524e82615cb8565b615c94565b818152886020838501011115615267578384fd5b81602084016020830137908101602001929092525092959194509250565b60008060408385031215615297578182fd5b82356152a281615d06565b9150602083013561513a81615d1b565b600080604083850312156152c4578182fd5b82356152cf81615d06565b946020939093013593505050565b6000806000606084860312156152f1578081fd5b83356152fc81615d06565b925060208401359150604084013561531381615d06565b809150509250925092565b60008060008060008060c08789031215615336578384fd5b863561534181615d06565b95506020870135945060408701359350606087013561535f81615d4d565b9598949750929560808101359460a0909101359350915050565b6000806020838503121561538b578182fd5b823567ffffffffffffffff808211156153a2578384fd5b818501915085601f8301126153b5578384fd5b8135818111156153c3578485fd5b86602080830285010111156153d6578485fd5b60209290920196919550909350505050565b6000602082840312156153f9578081fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461350c578182fd5b600060208284031215615439578081fd5b813561350c81615d29565b600060208284031215615455578081fd5b815167ffffffffffffffff81111561546b578182fd5b8201601f8101841361547b578182fd5b805161548961524e82615cb8565b81815285602083850101111561549d578384fd5b6145d6826020830160208601615cda565b6000608082840312156154bf578081fd5b50919050565b600060a082840312156154bf578081fd5b600060c082840312156154bf578081fd5b600081830360808112156154f9578182fd5b6040516040810167ffffffffffffffff828210818311171561551757fe5b816040526060841215615528578485fd5b60a083019350818410818511171561553c57fe5b50826040528435925061554e83615d06565b91825260208401359161556083615d06565b826060830152615572604086016150de565b60808301528152615585606085016150c1565b6020820152949350505050565b600061016082840312156154bf578081fd5b6000602082840312156155b5578081fd5b813561350c81615d38565b600080604083850312156155d2578182fd5b82516155dd81615d38565b602084015190925061513a81615d38565b600080600080600060a08688031215615605578283fd5b855161561081615d38565b809550506020860151935060408601519250606086015161563081615d38565b608087015190925061564181615d38565b809150509295509295909350565b600080600080600080600060e0888a031215615669578485fd5b875161567481615d06565b602089015190975061568581615d29565b9550615693604089016150cc565b94506156a1606089016150cc565b93506156af608089016150cc565b925060a08801516156bf81615d4d565b60c08901519092506156d081615d1b565b8091505092959891949750929550565b6000602082840312156156f1578081fd5b6114b5826150de565b60006020828403121561570b578081fd5b5035919050565b60008060408385031215615724578182fd5b82359150602083013561513a81615d06565b60008060408385031215615748578182fd5b505080516020909101519092909150565b6000806000806060858703121561576e578182fd5b8435935060208501359250604085013567ffffffffffffffff80821115615793578384fd5b818701915087601f8301126157a6578384fd5b8135818111156157b4578485fd5b8860208285010111156157c5578485fd5b95989497505060200194505050565b600081518084526157ec816020860160208601615cda565b601f01601f19169290920160200192915050565b60020b9052565b6001600160801b03169052565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b60006001600160a01b03871682528560020b60208301528460020b60408301526001600160801b038416606083015260a06080830152614ff060a08301846157d4565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6001600160a01b039390931683526001600160801b03918216602084015216604082015260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615953577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526159418583516157d4565b94509285019290850190600101615907565b5092979650505050505050565b901515815260200190565b90815260200190565b6001600160a01b03929092168252602082015260400190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b6000602082526114b560208301846157d4565b6020808252600c908201527f4e6f7420617070726f7665640000000000000000000000000000000000000000604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f507269636520736c69707061676520636865636b000000000000000000000000604082015260600190565b60208082526010908201527f496e76616c696420746f6b656e20494400000000000000000000000000000000604082015260600190565b6020808252600b908201527f4e6f7420636c6561726564000000000000000000000000000000000000000000604082015260600190565b815180516001600160a01b03908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6001600160801b039390931683526020830191909152604082015260600190565b9384526001600160801b039290921660208401526040830152606082015260800190565b918252602082015260400190565b6bffffffffffffffffffffffff8d1681526001600160a01b038c811660208301528b811660408301528a16606082015262ffffff89166080820152600288900b60a08201526101808101615be960c0830189615800565b615bf660e0830188615807565b8561010083015284610120830152615c12610140830185615807565b615c20610160830184615807565b9d9c50505050505050505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615c65578283fd5b83018035915067ffffffffffffffff821115615c7f578283fd5b602001915036819003821315613bfb57600080fd5b60405181810167ffffffffffffffff81118282101715615cb057fe5b604052919050565b600067ffffffffffffffff821115615ccc57fe5b50601f01601f191660200190565b60005b83811015615cf5578181015183820152602001615cdd565b83811115612a195750506000910152565b6001600160a01b03811681146150a557600080fd5b80151581146150a557600080fd5b8060020b81146150a557600080fd5b6001600160801b03811681146150a557600080fd5b60ff811681146150a557600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732315065726d69743a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e7366657220746f20746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a164736f6c6343000706000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
