Overview ERC721
Total Supply:
59,688 AFO

Holders:
58,922
Profile Summary
Blockchain:
Base (8453)

Contract Source Code Verified (Exact Match)
Contract Name:
OpenEdition721Mint

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 100 runs

Created At:
Mon, 15 Jul 2024 00:24:13 GMT
OpenEdition721Mint.sol
src
contracts
tokenforge
mint-contracts
OpenEdition721Mint.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "FailedToSendEth",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "sent",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "expected",
        "type": "uint256"
      }
    ],
    "name": "IncorrectETHAmount",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "message",
        "type": "string"
      }
    ],
    "name": "InvalidCollectionRequest",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidContractAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidInitialization",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidMintQuantity",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MintingClosed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MintingNotStarted",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotInitializing",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OutOfSupply",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OverClaimLimit",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "OwnableInvalidOwner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "OwnableUnauthorizedAccount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ReentrancyGuardReentrantCall",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "TokenDoesNotExist",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "id",
        "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": false,
        "internalType": "uint64",
        "name": "version",
        "type": "uint64"
      }
    ],
    "name": "Initialized",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [],
    "name": "MintConfigChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferStarted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "quantity",
        "type": "uint256"
      }
    ],
    "name": "TokenForgeMint",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "quantity",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "comment",
        "type": "string"
      }
    ],
    "name": "TokenForgeMintComment",
    "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": "id",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "Withdrawn",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "acceptOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "id",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "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": "contractURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "quantity",
        "type": "uint256"
      }
    ],
    "name": "cost",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "currentTokenId",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "getApproved",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getMetadata",
    "outputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "creator",
            "type": "address"
          },
          {
            "internalType": "string",
            "name": "name",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "description",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "symbol",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "image",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "animation_url",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "mintType",
            "type": "string"
          },
          {
            "internalType": "uint128",
            "name": "maxSupply",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "maxPerWallet",
            "type": "uint128"
          },
          {
            "internalType": "uint256",
            "name": "cost",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "startTime",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "endTime",
            "type": "uint256"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "to",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "amt",
                "type": "uint256"
              }
            ],
            "internalType": "struct Royalty[]",
            "name": "royalties",
            "type": "tuple[]"
          },
          {
            "internalType": "uint256",
            "name": "nonce",
            "type": "uint256"
          }
        ],
        "internalType": "struct CollectionCreationRequest",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "creator",
            "type": "address"
          },
          {
            "internalType": "string",
            "name": "name",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "description",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "symbol",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "image",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "animation_url",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "mintType",
            "type": "string"
          },
          {
            "internalType": "uint128",
            "name": "maxSupply",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "maxPerWallet",
            "type": "uint128"
          },
          {
            "internalType": "uint256",
            "name": "cost",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "startTime",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "endTime",
            "type": "uint256"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "to",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "amt",
                "type": "uint256"
              }
            ],
            "internalType": "struct Royalty[]",
            "name": "royalties",
            "type": "tuple[]"
          },
          {
            "internalType": "uint256",
            "name": "nonce",
            "type": "uint256"
          }
        ],
        "internalType": "struct CollectionCreationRequest",
        "name": "request",
        "type": "tuple"
      },
      {
        "internalType": "address",
        "name": "mintingContract_",
        "type": "address"
      }
    ],
    "name": "initialize",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "isApprovedForAll",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "metadata",
    "outputs": [
      {
        "internalType": "address",
        "name": "creator",
        "type": "address"
      },
      {
        "internalType": "string",
        "name": "name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "description",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "symbol",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "image",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "animation_url",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "mintType",
        "type": "string"
      },
      {
        "internalType": "uint128",
        "name": "maxSupply",
        "type": "uint128"
      },
      {
        "internalType": "uint128",
        "name": "maxPerWallet",
        "type": "uint128"
      },
      {
        "internalType": "uint256",
        "name": "cost",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "startTime",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "endTime",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "nonce",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "quantity",
        "type": "uint256"
      }
    ],
    "name": "mint",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "quantity",
        "type": "uint256"
      },
      {
        "internalType": "string",
        "name": "comment",
        "type": "string"
      }
    ],
    "name": "mintWithComment",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "mintingContract",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "id",
        "type": "uint256"
      }
    ],
    "name": "ownerOf",
    "outputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "pendingOwner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "id",
        "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": "id",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "setApprovalForAll",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "creator",
            "type": "address"
          },
          {
            "internalType": "string",
            "name": "name",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "description",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "symbol",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "image",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "animation_url",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "mintType",
            "type": "string"
          },
          {
            "internalType": "uint128",
            "name": "maxSupply",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "maxPerWallet",
            "type": "uint128"
          },
          {
            "internalType": "uint256",
            "name": "cost",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "startTime",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "endTime",
            "type": "uint256"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "to",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "amt",
                "type": "uint256"
              }
            ],
            "internalType": "struct Royalty[]",
            "name": "royalties",
            "type": "tuple[]"
          },
          {
            "internalType": "uint256",
            "name": "nonce",
            "type": "uint256"
          }
        ],
        "internalType": "struct CollectionCreationRequest",
        "name": "metadata_",
        "type": "tuple"
      }
    ],
    "name": "setMetadata",
    "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": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "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": "id",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "withdraw",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
608060405234801562000010575f80fd5b5060408051602080820183525f80835283519182019093528281529091620000398382620001ae565b506001620000488282620001ae565b50620000569150506200005c565b6200027a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000ad5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146200010d5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200013957607f821691505b6020821081036200015857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620001a957805f5260205f20601f840160051c81016020851015620001855750805b601f840160051c820191505b81811015620001a6575f815560010162000191565b50505b505050565b81516001600160401b03811115620001ca57620001ca62000110565b620001e281620001db845462000124565b846200015e565b602080601f83116001811462000218575f8415620002005750858301515b5f19600386901b1c1916600185901b17855562000272565b5f85815260208120601f198616915b82811015620002485788860151825594840194600190910190840162000227565b50858210156200026657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b614ada80620002885f395ff3fe608060405260043610610188575f3560e01c8063715018a6116100d4578063a22cb46511610083578063a22cb4651461042b578063b88d4fde1461044a578063c87b56dd14610469578063d2f6f67d14610488578063e30c3978146104a7578063e8a3d485146104bb578063e985e9c5146104cf578063f2fde38b14610508575f80fd5b8063715018a61461037c578063792a09321461039057806379ba5097146103af5780637a5b4f59146103c35780638da5cb5b146103e45780639097548d146103f857806395d89b4114610417575f80fd5b806333f014f01161013b57806333f014f014610299578063392f37e9146102b85780633ccfd60b146102e557806340c10f19146102f957806342842e0e1461030c578063574fed171461032b5780636352211e1461033e57806370a082311461035d575f80fd5b80629a9b7b1461018c57806301ffc9a7146101b457806306fdde03146101e3578063081812fc14610204578063095ea7b31461024557806318160ddd1461026657806323b872dd1461027a575b5f80fd5b348015610197575f80fd5b506101a160065481565b6040519081526020015b60405180910390f35b3480156101bf575f80fd5b506101d36101ce366004613ad9565b610527565b60405190151581526020016101ab565b3480156101ee575f80fd5b506101f7610578565b6040516101ab9190613b41565b34801561020f575f80fd5b5061023861021e366004613b53565b60046020525f90815260409020546001600160a01b031681565b6040516101ab9190613b6a565b348015610250575f80fd5b5061026461025f366004613b9d565b610603565b005b348015610271575f80fd5b506101a16106ca565b348015610285575f80fd5b50610264610294366004613bc7565b6106df565b3480156102a4575f80fd5b506102646102b3366004613f42565b61085c565b3480156102c3575f80fd5b506102cc610a2b565b6040516101ab9d9c9b9a99989796959493929190613f90565b3480156102f0575f80fd5b50610264610db9565b610264610307366004613b9d565b610e87565b348015610317575f80fd5b50610264610326366004613bc7565b61121d565b6102646103393660046140ae565b6112d9565b348015610349575f80fd5b50610238610358366004613b53565b61138b565b348015610368575f80fd5b506101a1610377366004614105565b6113e1565b348015610387575f80fd5b50610264611442565b34801561039b575f80fd5b506102646103aa366004614120565b611455565b3480156103ba575f80fd5b50610264611491565b3480156103ce575f80fd5b506103d76114d0565b6040516101ab919061419f565b3480156103ef575f80fd5b5061023861199f565b348015610403575f80fd5b506101a1610412366004613b53565b6119d3565b348015610422575f80fd5b506101f76119f7565b348015610436575f80fd5b5061026461044536600461430b565b611a04565b348015610455575f80fd5b50610264610464366004614337565b611a6f565b348015610474575f80fd5b506101f7610483366004613b53565b611b31565b348015610493575f80fd5b50601454610238906001600160a01b031681565b3480156104b2575f80fd5b50610238611fb3565b3480156104c6575f80fd5b506101f7611fbd565b3480156104da575f80fd5b506101d36104e93660046143a4565b600560209081525f928352604080842090915290825290205460ff1681565b348015610513575f80fd5b50610264610522366004614105565b612438565b5f6301ffc9a760e01b6001600160e01b03198316148061055757506380ac58cd60e01b6001600160e01b03198316145b806105725750635b5e139f60e01b6001600160e01b03198316145b92915050565b5f8054610584906143d0565b80601f01602080910402602001604051908101604052809291908181526020018280546105b0906143d0565b80156105fb5780601f106105d2576101008083540402835291602001916105fb565b820191905f5260205f20905b8154815290600101906020018083116105de57829003601f168201915b505050505081565b5f818152600260205260409020546001600160a01b03163381148061064a57506001600160a01b0381165f90815260056020908152604080832033845290915290205460ff165b61066f5760405162461bcd60e51b815260040161066690614408565b60405180910390fd5b5f8281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b5f60016006546106da9190614444565b905090565b5f818152600260205260409020546001600160a01b038481169116146107345760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b6044820152606401610666565b6001600160a01b03821661075a5760405162461bcd60e51b815260040161066690614457565b336001600160a01b038416148061079357506001600160a01b0383165f90815260056020908152604080832033845290915290205460ff165b806107b357505f818152600460205260409020546001600160a01b031633145b6107cf5760405162461bcd60e51b815260040161066690614408565b6001600160a01b038084165f81815260036020908152604080832080545f19019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156108a05750825b90505f826001600160401b031660011480156108bb5750303b155b9050811580156108c9575080155b156108e75760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561091157845460ff60401b1916600160401b1785555b6001600160a01b0386166109385760405163a710429d60e01b815260040160405180910390fd5b6109406124a8565b865161094b906124b0565b6109536124d2565b60208701515f9061096490826144c6565b50606087015160019061097790826144c6565b50610981876124e2565b60c0870151600d9061099390826144c6565b50601480546001600160a01b0319166001600160a01b03881617905560016006556040517fa703f5371c9a5519d27a0ab98ff81ca400a4adb7bf05d607347bfffc0efabe8f905f90a18315610a2257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b60078054600880546001600160a01b039092169291610a49906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a75906143d0565b8015610ac05780601f10610a9757610100808354040283529160200191610ac0565b820191905f5260205f20905b815481529060010190602001808311610aa357829003601f168201915b505050505090806002018054610ad5906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b01906143d0565b8015610b4c5780601f10610b2357610100808354040283529160200191610b4c565b820191905f5260205f20905b815481529060010190602001808311610b2f57829003601f168201915b505050505090806003018054610b61906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8d906143d0565b8015610bd85780601f10610baf57610100808354040283529160200191610bd8565b820191905f5260205f20905b815481529060010190602001808311610bbb57829003601f168201915b505050505090806004018054610bed906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c19906143d0565b8015610c645780601f10610c3b57610100808354040283529160200191610c64565b820191905f5260205f20905b815481529060010190602001808311610c4757829003601f168201915b505050505090806005018054610c79906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca5906143d0565b8015610cf05780601f10610cc757610100808354040283529160200191610cf0565b820191905f5260205f20905b815481529060010190602001808311610cd357829003601f168201915b505050505090806006018054610d05906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610d31906143d0565b8015610d7c5780601f10610d5357610100808354040283529160200191610d7c565b820191905f5260205f20905b815481529060010190602001808311610d5f57829003601f168201915b505050600784015460088501546009860154600a870154600c9097015495966001600160801b0380851697600160801b909504169550919350918d565b610dc161266f565b475f610dcb61199f565b6001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610e12576040519150601f19603f3d011682016040523d82523d5f602084013e610e17565b606091505b5050905080610e3957604051633fa2a53d60e21b815260040160405180910390fd5b610e4161199f565b6001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610e7b91815260200190565b60405180910390a25050565b610e8f6126a1565b805f03610eaf5760405163011674e560e71b815260040160405180910390fd5b600e54610ec6906001600160801b03166001614585565b6001600160801b031681600654610edd91906145ac565b1115610efc576040516309b741cf60e41b815260040160405180910390fd5b60105415801590610f0e575060105442105b15610f2c576040516369183ba160e11b815260040160405180910390fd5b60115415801590610f3e575060115442115b15610f5c5760405163a7e4d9bd60e01b815260040160405180910390fd5b600e54600160801b90046001600160801b031681610f79846113e1565b610f8391906145ac565b1115610fa257604051632e04c6f560e11b815260040160405180910390fd5b5f805f610fae846126d8565b91945092509050610fbf82846145ac565b3414610ff25734610fd083856145ac565b6040516305e4640960e21b815260048101929092526024820152604401610666565b5f5b84816001600160401b031610156110355760068054611023918891905f61101a836145bf565b9190505561278d565b8061102d816145d7565b915050610ff4565b505f61104183826145ac565b90505f826001600160a01b0316846040515f6040518083038185875af1925050503d805f811461108c576040519150601f19603f3d011682016040523d82523d5f602084013e611091565b606091505b50509050806110b357604051633fa2a53d60e21b815260040160405180910390fd5b5f5b60125481101561119f575f6007600b0182815481106110d6576110d66145fc565b5f91825260208083206040805180820190915260029093020180546001600160a01b0316835260010154908201819052909250611113908a614610565b905061111f81866145ac565b94505f825f01516001600160a01b0316826040515f6040518083038185875af1925050503d805f811461116d576040519150601f19603f3d011682016040523d82523d5f602084013e611172565b606091505b505090508061119457604051633fa2a53d60e21b815260040160405180910390fd5b5050506001016110b5565b506111aa84866145ac565b82146111bb5781610fd085876145ac565b866001600160a01b03167f02c36b548faac112a24e09f132ea830e930cc215c0a74a678b70e43aede11edd876040516111f691815260200190565b60405180910390a2505050505061121960015f80516020614a4783398151915255565b5050565b6112288383836106df565b6001600160a01b0382163b15806112b85750604051630a85bd0160e11b808252906001600160a01b0384169063150b7a029061126c90339088908790600401614627565b6020604051808303815f875af1158015611288573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ac9190614659565b6001600160e01b031916145b6112d45760405162461bcd60e51b815260040161066690614674565b505050565b6040516340c10f1960e01b81526001600160a01b03851660048201526024810184905230906340c10f199034906044015f604051808303818588803b158015611320575f80fd5b505af1158015611332573d5f803e3d5ffd5b50508315925061138591505057836001600160a01b03167f203498aecb28c99d51721d218d93e378293b86eacb26b42246dae394840ae75684848460405161137c939291906146c6565b60405180910390a25b50505050565b5f818152600260205260409020546001600160a01b0316806113dc5760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b6044820152606401610666565b919050565b5f6001600160a01b0382166114275760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610666565b506001600160a01b03165f9081526003602052604090205490565b61144a61266f565b6114535f6124b0565b565b61145d61266f565b611466816124e2565b6040517fa703f5371c9a5519d27a0ab98ff81ca400a4adb7bf05d607347bfffc0efabe8f905f90a150565b338061149b611fb3565b6001600160a01b0316146114c4578060405163118cdaa760e01b81526004016106669190613b6a565b6114cd816124b0565b50565b611556604051806101c001604052805f6001600160a01b031681526020016060815260200160608152602001606081526020016060815260200160608152602001606081526020015f6001600160801b031681526020015f6001600160801b031681526020015f81526020015f81526020015f8152602001606081526020015f81525090565b604080516101c08101909152600780546001600160a01b0316825260088054602084019190611584906143d0565b80601f01602080910402602001604051908101604052809291908181526020018280546115b0906143d0565b80156115fb5780601f106115d2576101008083540402835291602001916115fb565b820191905f5260205f20905b8154815290600101906020018083116115de57829003601f168201915b50505050508152602001600282018054611614906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611640906143d0565b801561168b5780601f106116625761010080835404028352916020019161168b565b820191905f5260205f20905b81548152906001019060200180831161166e57829003601f168201915b505050505081526020016003820180546116a4906143d0565b80601f01602080910402602001604051908101604052809291908181526020018280546116d0906143d0565b801561171b5780601f106116f25761010080835404028352916020019161171b565b820191905f5260205f20905b8154815290600101906020018083116116fe57829003601f168201915b50505050508152602001600482018054611734906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611760906143d0565b80156117ab5780601f10611782576101008083540402835291602001916117ab565b820191905f5260205f20905b81548152906001019060200180831161178e57829003601f168201915b505050505081526020016005820180546117c4906143d0565b80601f01602080910402602001604051908101604052809291908181526020018280546117f0906143d0565b801561183b5780601f106118125761010080835404028352916020019161183b565b820191905f5260205f20905b81548152906001019060200180831161181e57829003601f168201915b50505050508152602001600682018054611854906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611880906143d0565b80156118cb5780601f106118a2576101008083540402835291602001916118cb565b820191905f5260205f20905b8154815290600101906020018083116118ae57829003601f168201915b505050918352505060078201546001600160801b03808216602080850191909152600160801b909204166040808401919091526008840154606084015260098401546080840152600a84015460a0840152600b8401805482518185028101850190935280835260c09094019391929091905f9084015b82821015611988575f848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101611941565b505050508152602001600c82015481525050905090565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b5f805f6119df846126d8565b5090925090506119ef81836145ac565b949350505050565b60018054610584906143d0565b335f8181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611a7a8585856106df565b6001600160a01b0384163b1580611b0e5750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290611ac29033908a908990899089906004016146e8565b6020604051808303815f875af1158015611ade573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b029190614659565b6001600160e01b031916145b611b2a5760405162461bcd60e51b815260040161066690614674565b5050505050565b6060600654821180611b41575081155b15611b625760405163c927e5bf60e01b815260048101839052602401610666565b604080516101c08101909152600780546001600160a01b03168252600880546105729392916020840191611b95906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc1906143d0565b8015611c0c5780601f10611be357610100808354040283529160200191611c0c565b820191905f5260205f20905b815481529060010190602001808311611bef57829003601f168201915b50505050508152602001600282018054611c25906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611c51906143d0565b8015611c9c5780601f10611c7357610100808354040283529160200191611c9c565b820191905f5260205f20905b815481529060010190602001808311611c7f57829003601f168201915b50505050508152602001600382018054611cb5906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce1906143d0565b8015611d2c5780601f10611d0357610100808354040283529160200191611d2c565b820191905f5260205f20905b815481529060010190602001808311611d0f57829003601f168201915b50505050508152602001600482018054611d45906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611d71906143d0565b8015611dbc5780601f10611d9357610100808354040283529160200191611dbc565b820191905f5260205f20905b815481529060010190602001808311611d9f57829003601f168201915b50505050508152602001600582018054611dd5906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e01906143d0565b8015611e4c5780601f10611e2357610100808354040283529160200191611e4c565b820191905f5260205f20905b815481529060010190602001808311611e2f57829003601f168201915b50505050508152602001600682018054611e65906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e91906143d0565b8015611edc5780601f10611eb357610100808354040283529160200191611edc565b820191905f5260205f20905b815481529060010190602001808311611ebf57829003601f168201915b505050918352505060078201546001600160801b03808216602080850191909152600160801b909204166040808401919091526008840154606084015260098401546080840152600a84015460a0840152600b8401805482518185028101850190935280835260c09094019391929091905f9084015b82821015611f99575f848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101611f52565b505050508152602001600c82015481525050836001612856565b5f806119c36129a1565b60605f80611fcb60016126d8565b50604080516101c08101909152600780546001600160a01b03168252600880549496509294506124319391929091602084019190612008906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054612034906143d0565b801561207f5780601f106120565761010080835404028352916020019161207f565b820191905f5260205f20905b81548152906001019060200180831161206257829003601f168201915b50505050508152602001600282018054612098906143d0565b80601f01602080910402602001604051908101604052809291908181526020018280546120c4906143d0565b801561210f5780601f106120e65761010080835404028352916020019161210f565b820191905f5260205f20905b8154815290600101906020018083116120f257829003601f168201915b50505050508152602001600382018054612128906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054612154906143d0565b801561219f5780601f106121765761010080835404028352916020019161219f565b820191905f5260205f20905b81548152906001019060200180831161218257829003601f168201915b505050505081526020016004820180546121b8906143d0565b80601f01602080910402602001604051908101604052809291908181526020018280546121e4906143d0565b801561222f5780601f106122065761010080835404028352916020019161222f565b820191905f5260205f20905b81548152906001019060200180831161221257829003601f168201915b50505050508152602001600582018054612248906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054612274906143d0565b80156122bf5780601f10612296576101008083540402835291602001916122bf565b820191905f5260205f20905b8154815290600101906020018083116122a257829003601f168201915b505050505081526020016006820180546122d8906143d0565b80601f0160208091040260200160405190810160405280929190818152602001828054612304906143d0565b801561234f5780601f106123265761010080835404028352916020019161234f565b820191905f5260205f20905b81548152906001019060200180831161233257829003601f168201915b505050918352505060078201546001600160801b03808216602080850191909152600160801b909204166040808401919091526008840154606084015260098401546080840152600a84015460a0840152600b8401805482518185028101850190935280835260c09094019391929091905f9084015b8282101561240c575f848152602090819020604080518082019091526002850290910180546001600160a01b031682526001908101548284015290835290920191016123c5565b505050508152602001600c82015481525050828461242a91906145ac565b60016129c5565b9250505090565b61244061266f565b5f6124496129a1565b80546001600160a01b0319166001600160a01b038416908117825590915061246f61199f565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611453612b0d565b5f6124b96129a1565b80546001600160a01b0319168155905061121982612b56565b6124da612b0d565b611453612bc6565b6124eb81612bce565b8051600780546001600160a01b0319166001600160a01b03909216919091179055602081015160089061251e90826144c6565b50604081015160099061253190826144c6565b506060810151600a9061254490826144c6565b506080810151600b9061255790826144c6565b5060a0810151600c9061256a90826144c6565b5060e08101516101008201516001600160801b03908116600160801b02911617600e55610120810151600f556101408101516010556101608101516011556125b360125f613a82565b5f5b81610180015151811015611219576007600b01604051806040016040528084610180015184815181106125ea576125ea6145fc565b60200260200101515f01516001600160a01b03168152602001846101800151848151811061261a5761261a6145fc565b6020908102919091018101518101519091528254600180820185555f94855293829020835160029092020180546001600160a01b0319166001600160a01b0390921691909117815591015190820155016125b5565b3361267861199f565b6001600160a01b031614611453573360405163118cdaa760e01b81526004016106669190613b6a565b5f80516020614a478339815191528054600119016126d257604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60145460405163106d10c160e21b81525f91829182916001600160a01b031690829082906341b4430490612710903090600401613b6a565b606060405180830381865afa15801561272b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061274f9190614726565b90505f866007600801546127639190614610565b90505f8783604001516127769190614610565b602090930151919650919450925050509193909250565b6127978282612f83565b6001600160a01b0382163b15806128275750604051630a85bd0160e11b808252906001600160a01b0384169063150b7a02906127db9033905f908790600401614627565b6020604051808303815f875af11580156127f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061281b9190614659565b6001600160e01b031916145b6112195760405162461bcd60e51b815260040161066690614674565b60015f80516020614a4783398151915255565b60605f846020015161286785613068565b60405160200161287892919061478e565b60408051601f1981840301815282820190915260048252636e616d6560e01b602083015291505f9061297790612972906128b290856130f7565b6128e36040518060400160405280600b81526020016a3232b9b1b934b83a34b7b760a91b8152508a604001516130f7565b61290f604051806040016040528060068152602001651cde5b589bdb60d21b8152508b606001516130f7565b61293a60405180604001604052806005815260200164696d61676560d81b8152508c608001516130f7565b61296d6040518060400160405280600d81526020016c185b9a5b585d1a5bdb97dd5c9b609a1b8152508d60a001516130f7565b613135565b61320b565b90508315612991576129888161321e565b9250505061299a565b915061299a9050565b9392505050565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0090565b60605f612aed6129726129f8604051806040016040528060048152602001636e616d6560e01b81525088602001516130f7565b612a296040518060400160405280600b81526020016a3232b9b1b934b83a34b7b760a91b81525089604001516130f7565b612a55604051806040016040528060068152602001651cde5b589bdb60d21b8152508a606001516130f7565b612a8060405180604001604052806005815260200164696d61676560d81b8152508b608001516130f7565b612ab36040518060400160405280600d81526020016c185b9a5b585d1a5bdb97dd5c9b609a1b8152508c60a001516130f7565b612ae86040518060400160405280600a8152602001696d696e74436f6e66696760b01b815250612ae38e8e61326e565b6132ef565b61330d565b90508215612b0657612afe8161321e565b91505061299a565b905061299a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661145357604051631afcd79f60e31b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b612843612b0d565b806101600151816101400151118015612beb575061016081015115155b15612c575760405163e21c329160e01b815260206004820152603560248201527f456e642074696d65206d7573742062652067726561746572207468616e206f726044820152741032b8bab0b6103a379039ba30b93a103a34b6b29760591b6064820152608401610666565b5f805b82610180015151811015612d15575f6001600160a01b03168361018001518281518110612c8957612c896145fc565b60200260200101515f01516001600160a01b031603612cdd5760405163e21c329160e01b815260206004820152600f60248201526e496e76616c6964204164647265737360881b6044820152606401610666565b8261018001518181518110612cf457612cf46145fc565b60200260200101516020015182612d0b91906145ac565b9150600101612c5a565b508161012001518114612d6b5760405163e21c329160e01b815260206004820152601f60248201527f546f74616c20726f79616c74696573206d75737420657175616c20636f7374006044820152606401610666565b6005826101800151511115612dd55760405163e21c329160e01b815260206004820152602960248201527f43616e6e6f742068617665206d6f7265207468616e203520726f79616c74792060448201526861646472657373657360b81b6064820152608401610666565b8160e001516001600160801b03165f03612e405760405163e21c329160e01b815260206004820152602560248201527f4d617820737570706c79206d7573742062652067726561746572207468616e206044820152643d32b9379760d91b6064820152608401610666565b8161010001516001600160801b03165f03612eb05760405163e21c329160e01b815260206004820152602960248201527f4d6178207065722077616c6c6574206d757374206265206772656174657220746044820152683430b7103d32b9379760b91b6064820152608401610666565b6020820151511580612ec55750606082015151155b15612f135760405163e21c329160e01b815260206004820152601e60248201527f4e616d6520262073796d626f6c2063616e6e6f7420626520656d7074792e00006044820152606401610666565b608082015151158015612f29575060a082015151155b156112195760405163e21c329160e01b8152602060048201526024808201527f4d757374206861766520616e20696d616765206f7220616e696d6174696f6e5f6044820152633ab9361760e11b6064820152608401610666565b6001600160a01b038216612fa95760405162461bcd60e51b815260040161066690614457565b5f818152600260205260409020546001600160a01b031615612ffe5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610666565b6001600160a01b0382165f81815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60605f61307483613403565b60010190505f816001600160401b0381111561309257613092613c05565b6040519080825280601f01601f1916602001820160405280156130bc576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846130c657509392505050565b6060613103835f6134da565b61310d835f6134da565b60405160200161311e9291906147ca565b604051602081830303815290604052905092915050565b60408051600580825260c082019092526060915f9190816020015b606081526020019060019003908161315057905050905086815f8151811061317a5761317a6145fc565b60200260200101819052508581600181518110613199576131996145fc565b602002602001018190525084816002815181106131b8576131b86145fc565b602002602001018190525083816003815181106131d7576131d76145fc565b602002602001018190525082816004815181106131f6576131f66145fc565b60209081029190910101529695505050505050565b6060610572613219836135e1565b613606565b606061324882604051602001613234919061481d565b604051602081830303815290604052613619565b6040516020016132589190614838565b6040516020818303038152906040529050919050565b606061299a6129726132b6604051806040016040528060098152602001686d6178537570706c7960b81b8152506132b18760e001516001600160801b0316613068565b6130f7565b6132ea6040518060400160405280600681526020016570686173657360d01b815250612ae36132e58989613773565b613961565b613974565b60606132fb835f6134da565b8260405160200161311e92919061487c565b60408051600680825260e082019092526060915f9190816020015b606081526020019060019003908161332857905050905087815f81518110613352576133526145fc565b60200260200101819052508681600181518110613371576133716145fc565b60200260200101819052508581600281518110613390576133906145fc565b602002602001018190525084816003815181106133af576133af6145fc565b602002602001018190525083816004815181106133ce576133ce6145fc565b602002602001018190525082816005815181106133ed576133ed6145fc565b6020908102919091010152979650505050505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106134415772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061346d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061348b57662386f26fc10000830492506010015b6305f5e10083106134a3576305f5e100830492506008015b61271083106134b757612710830492506004015b606483106134c9576064830492506002015b600a83106105725760010192915050565b815160405160200190830182156134f657602282538160010191505b7b5c75303030303031323334353637383961626364656662746e0066726015526b1000000000000004000000005b8185146135b45760018501945060ff8551166020811061356d57816001821b166135575780845360018401935050613524565b605c845380600185015360028401935050613524565b6137006001821b1661359a578060041c51601d53600f811651601e53601951845260068401935050613524565b605c84536008810151600185015350600283019250613524565b505081156135c457602281536001015b5f815260408051601f198184030181526020909201905292915050565b606061057282604051806040016040528060018152602001600b60fa1b8152506139e8565b60608160405160200161325891906148c6565b606081515f0361363657505060408051602081019091525f815290565b5f604051806060016040528060408152602001614a076040913990505f60038451600261366391906145ac565b61366d91906148f9565b613678906004614610565b6001600160401b0381111561368f5761368f613c05565b6040519080825280601f01601f1916602001820160405280156136b9576020820181803683370190505b509050600182016020820185865187016020810180515f82525b8284101561372e576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f81168701518653506001850194506136d3565b905250508551600390066001811461374d576002811461376057613768565b603d6001830353603d6002830353613768565b603d60018303535b509195945050505050565b60605f61378d8461010001516001600160801b0316613068565b90505f6040518060600160405280603e8152602001614a67603e913990505f6040518060600160405280603e81526020016149c9603e913990505f82826040516020016137db929190614918565b60405160208183030381529060405290505f61386861297261383d604051806040016040528060068152602001651b595d1a1bd960d21b8152506040518060400160405280600a8152602001693078343063313066313960b01b8152506130f7565b6132ea60405180604001604052806006815260200165706172616d7360d01b815250612ae387613961565b90506139556129726138a3604051806040016040528060118152602001701b585e135a5b9d1cd4195c95d85b1b195d607a1b815250886130f7565b6138d660405180604001604052806009815260200168737461727454696d6560b81b8152506132b18d6101400151613068565b61390760405180604001604052806007815260200166656e6454696d6560c81b8152506132b18e6101600151613068565b61393160405180604001604052806005815260200164707269636560d81b8152506132b18e613068565b61296d604051806040016040528060028152602001610e8f60f31b815250886132ef565b98975050505050505050565b6060816040516020016132589190614953565b60408051600280825260608281019093525f9190816020015b606081526020019060019003908161398d57905050905083815f815181106139b7576139b76145fc565b602002602001018190525082816001815181106139d6576139d66145fc565b60209081029190910101529392505050565b606082515f03613a06575060408051602081019091525f8152610572565b5f835f81518110613a1957613a196145fc565b602002602001015190505f600190505b8451811015613a7a578184868381518110613a4657613a466145fc565b6020026020010151604051602001613a6093929190614986565b60408051601f198184030181529190529150600101613a29565b509392505050565b5080545f8255600202905f5260205f20908101906114cd91905b80821115613ac05780546001600160a01b03191681555f6001820155600201613a9c565b5090565b6001600160e01b0319811681146114cd575f80fd5b5f60208284031215613ae9575f80fd5b813561299a81613ac4565b5f5b83811015613b0e578181015183820152602001613af6565b50505f910152565b5f8151808452613b2d816020860160208601613af4565b601f01601f19169290920160200192915050565b602081525f61299a6020830184613b16565b5f60208284031215613b63575f80fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146114cd575f80fd5b80356113dc81613b7e565b5f8060408385031215613bae575f80fd5b8235613bb981613b7e565b946020939093013593505050565b5f805f60608486031215613bd9575f80fd5b8335613be481613b7e565b92506020840135613bf481613b7e565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715613c3b57613c3b613c05565b60405290565b6040516101c081016001600160401b0381118282101715613c3b57613c3b613c05565b604051601f8201601f191681016001600160401b0381118282101715613c8c57613c8c613c05565b604052919050565b5f82601f830112613ca3575f80fd5b81356001600160401b03811115613cbc57613cbc613c05565b613ccf601f8201601f1916602001613c64565b818152846020838601011115613ce3575f80fd5b816020850160208301375f918101602001919091529392505050565b80356001600160801b03811681146113dc575f80fd5b5f82601f830112613d24575f80fd5b813560206001600160401b03821115613d3f57613d3f613c05565b613d4d818360051b01613c64565b82815260069290921b84018101918181019086841115613d6b575f80fd5b8286015b84811015613db15760408189031215613d86575f80fd5b613d8e613c19565b8135613d9981613b7e565b81528185013585820152835291830191604001613d6f565b509695505050505050565b5f6101c08284031215613dcd575f80fd5b613dd5613c41565b9050613de082613b92565b815260208201356001600160401b0380821115613dfb575f80fd5b613e0785838601613c94565b60208401526040840135915080821115613e1f575f80fd5b613e2b85838601613c94565b60408401526060840135915080821115613e43575f80fd5b613e4f85838601613c94565b60608401526080840135915080821115613e67575f80fd5b613e7385838601613c94565b608084015260a0840135915080821115613e8b575f80fd5b613e9785838601613c94565b60a084015260c0840135915080821115613eaf575f80fd5b613ebb85838601613c94565b60c0840152613ecc60e08501613cff565b60e08401526101009150613ee1828501613cff565b91830191909152610120838101359083015261014080840135908301526101608084013590830152610180908184013581811115613f1d575f80fd5b613f2986828701613d15565b838501525050506101a080830135818301525092915050565b5f8060408385031215613f53575f80fd5b82356001600160401b03811115613f68575f80fd5b613f7485828601613dbc565b9250506020830135613f8581613b7e565b809150509250929050565b6001600160a01b038e1681526101a060208201525f613fb36101a083018f613b16565b8281036040840152613fc5818f613b16565b90508281036060840152613fd9818e613b16565b90508281036080840152613fed818d613b16565b905082810360a0840152614001818c613b16565b905082810360c0840152614015818b613b16565b91505061402d60e08301896001600160801b03169052565b6001600160801b03969096166101008201526101208101949094526101408401929092526101608301526101809091015298975050505050505050565b5f8083601f84011261407a575f80fd5b5081356001600160401b03811115614090575f80fd5b6020830191508360208285010111156140a7575f80fd5b9250929050565b5f805f80606085870312156140c1575f80fd5b84356140cc81613b7e565b93506020850135925060408501356001600160401b038111156140ed575f80fd5b6140f98782880161406a565b95989497509550505050565b5f60208284031215614115575f80fd5b813561299a81613b7e565b5f60208284031215614130575f80fd5b81356001600160401b03811115614145575f80fd5b6119ef84828501613dbc565b5f815180845260208085019450602084015f5b8381101561419457815180516001600160a01b031688528301518388015260409096019590820190600101614164565b509495945050505050565b602081526141b96020820183516001600160a01b03169052565b5f60208301516101c08060408501526141d66101e0850183613b16565b91506040850151601f19808685030160608701526141f48483613b16565b935060608701519150808685030160808701526142118483613b16565b935060808701519150808685030160a087015261422e8483613b16565b935060a08701519150808685030160c087015261424b8483613b16565b935060c08701519150808685030160e08701526142688483613b16565b935060e08701519150610100614288818801846001600160801b03169052565b87015191506101206142a4878201846001600160801b03169052565b87015161014087810191909152870151610160808801919091528701516101808088019190915287015186850382016101a0808901919091529092506142ea8584614151565b970151959092019490945250929392505050565b80151581146114cd575f80fd5b5f806040838503121561431c575f80fd5b823561432781613b7e565b91506020830135613f85816142fe565b5f805f805f6080868803121561434b575f80fd5b853561435681613b7e565b9450602086013561436681613b7e565b93506040860135925060608601356001600160401b03811115614387575f80fd5b6143938882890161406a565b969995985093965092949392505050565b5f80604083850312156143b5575f80fd5b82356143c081613b7e565b91506020830135613f8581613b7e565b600181811c908216806143e457607f821691505b60208210810361440257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600e908201526d1393d517d055551213d49256915160921b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561057257610572614430565b6020808252601190820152701253959053125117d49150d25412515395607a1b604082015260600190565b601f8211156112d457805f5260205f20601f840160051c810160208510156144a75750805b601f840160051c820191505b81811015611b2a575f81556001016144b3565b81516001600160401b038111156144df576144df613c05565b6144f3816144ed84546143d0565b84614482565b602080601f831160018114614526575f841561450f5750858301515b5f19600386901b1c1916600185901b17855561457d565b5f85815260208120601f198616915b8281101561455457888601518255948401946001909101908401614535565b508582101561457157878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b6001600160801b038181168382160190808211156145a5576145a5614430565b5092915050565b8082018082111561057257610572614430565b5f600182016145d0576145d0614430565b5060010190565b5f6001600160401b038083168181036145f2576145f2614430565b6001019392505050565b634e487b7160e01b5f52603260045260245ffd5b808202811582820484141761057257610572614430565b6001600160a01b03938416815291909216602082015260408101919091526080606082018190525f9082015260a00190565b5f60208284031215614669575f80fd5b815161299a81613ac4565b60208082526010908201526f155394d0519157d49150d2541251539560821b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b838152604060208201525f6146df60408301848661469e565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526080606082018190525f9061471b908301848661469e565b979650505050505050565b5f60608284031215614736575f80fd5b604051606081018181106001600160401b038211171561475857614758613c05565b6040528251614766816142fe565b8152602083015161477681613b7e565b60208201526040928301519281019290925250919050565b5f835161479f818460208801613af4565b61202360f01b90830190815283516147be816002840160208801613af4565b01600201949350505050565b5f601160f91b80835284516147e6816001860160208901613af4565b62111d1160e91b6001918501918201528451614809816004840160208901613af4565b016004810191909152600501949350505050565b5f825161482e818460208701613af4565b9190910192915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f825161486f81601d850160208701613af4565b91909101601d0192915050565b601160f91b815282515f90614898816001850160208801613af4565b61111d60f11b60019184019182015283516148ba816003840160208801613af4565b01600301949350505050565b607b60f81b81525f82516148e1816001850160208701613af4565b607d60f81b6001939091019283015250600201919050565b5f8261491357634e487b7160e01b5f52601260045260245ffd5b500490565b5f8351614929818460208801613af4565b600b60fa1b9083019081528351614947816001840160208801613af4565b01600101949350505050565b605b60f81b81525f825161496e816001850160208701613af4565b605d60f81b6001939091019283015250600201919050565b5f8451614997818460208901613af4565b8451908301906149ab818360208901613af4565b84519101906149be818360208801613af4565b019594505050505056fe7b226e616d65223a20227175616e74697479222c202261626954797065223a202275696e74323536222c20226b696e64223a20225155414e54495459227d4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f007b226e616d65223a2022726563697069656e74222c2261626954797065223a202261646472657373222c226b696e64223a2022524543495049454e54227da2646970667358221220e0c5062eb651fbc15dceeea83bc9b352b43c3ffa2b70c4a2dcee029628952b5764736f6c63430008160033