[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AddressAlreadyMinted", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [], "name": "AddressNotSigned", "type": "error" }, { "inputs": [], "name": "AlreadyInitialized", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC1155InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC1155InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "idsLength", "type": "uint256" }, { "internalType": "uint256", "name": "valuesLength", "type": "uint256" } ], "name": "ERC1155InvalidArrayLength", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC1155InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC1155InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC1155InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC1155MissingApprovalForAll", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InValdidTokenId", "type": "error" }, { "inputs": [], "name": "InsufficientTokenBalance", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "InvalidMerkleClaimData", "type": "error" }, { "inputs": [], "name": "InvalidMintSchedule", "type": "error" }, { "inputs": [], "name": "InvalidRoyaltyRecipient", "type": "error" }, { "inputs": [], "name": "NotArtCreator", "type": "error" }, { "inputs": [], "name": "NotEnded", "type": "error" }, { "inputs": [], "name": "NotInitialized", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "NotPhiFactory", "type": "error" }, { "inputs": [], "name": "NotStarted", "type": "error" }, { "inputs": [], "name": "OverMaxAllowedToMint", "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": [], "name": "TokenNotTransferable", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "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": "address", "name": "recipient", "type": "address" }, { "indexed": true, "internalType": "address", "name": "artistRewardReceiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "referrer", "type": "address" }, { "indexed": false, "internalType": "address", "name": "verifier", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "artId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes32", "name": "data", "type": "bytes32" } ], "name": "ArtClaimedData", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "artId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ArtCreated", "type": "event" }, { "anonymous": false, "inputs": [], "name": "ContractURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "credId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "verificationType", "type": "string" } ], "name": "InitializePhiNFT1155", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "tokenURI", "type": "string" } ], "name": "MintComment", "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": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "components": [ { "internalType": "uint32", "name": "royaltyBPS", "type": "uint32" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" } ], "indexed": false, "internalType": "struct ICreatorRoyaltiesControl.RoyaltyConfiguration", "name": "configuration", "type": "tuple" } ], "name": "UpdatedRoyalties", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "artId_", "type": "uint256" }, { "internalType": "address", "name": "minter_", "type": "address" }, { "internalType": "address", "name": "ref_", "type": "address" }, { "internalType": "address", "name": "verifier_", "type": "address" }, { "internalType": "uint256", "name": "quantity_", "type": "uint256" }, { "internalType": "bytes32", "name": "data_", "type": "bytes32" }, { "internalType": "string", "name": "imageURI_", "type": "string" } ], "name": "claimFromFactory", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "artId_", "type": "uint256" } ], "name": "createArtFromFactory", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "credChainId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "credId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "exists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "artId_", "type": "uint256" } ], "name": "getArtDataFromFactory", "outputs": [ { "components": [ { "internalType": "uint256", "name": "credId", "type": "uint256" }, { "internalType": "address", "name": "credCreator", "type": "address" }, { "internalType": "uint256", "name": "credChainId", "type": "uint256" }, { "internalType": "string", "name": "verificationType", "type": "string" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "address", "name": "artAddress", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "artist", "type": "address" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "components": [ { "internalType": "uint32", "name": "royaltyBPS", "type": "uint32" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" } ], "internalType": "struct ICreatorRoyaltiesControl.RoyaltyConfiguration", "name": "royalties", "type": "tuple" }, { "internalType": "uint256", "name": "maxSupply", "type": "uint256" }, { "internalType": "uint256", "name": "mintFee", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "numberMinted", "type": "uint256" }, { "internalType": "bool", "name": "soulBounded", "type": "bool" } ], "internalType": "struct IPhiFactory.ArtData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "getFactoryArtId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPhiFactoryContract", "outputs": [ { "internalType": "contract IPhiFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getRoyalties", "outputs": [ { "components": [ { "internalType": "uint32", "name": "royaltyBPS", "type": "uint32" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" } ], "internalType": "struct ICreatorRoyaltiesControl.RoyaltyConfiguration", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "artId_", "type": "uint256" } ], "name": "getTokenIdFromFactoryArtId", "outputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "credChainId_", "type": "uint256" }, { "internalType": "uint256", "name": "credId_", "type": "uint256" }, { "internalType": "string", "name": "verificationType_", "type": "string" }, { "internalType": "address", "name": "protocolFeeDestination_", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "merkleClaim", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "mintFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "minted", "outputs": [ { "internalType": "bool", "name": "minted", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "minter", "type": "address" } ], "name": "minterData", "outputs": [ { "internalType": "bytes32", "name": "data_", "type": "bytes32" } ], "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": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "phiFactoryContract", "outputs": [ { "internalType": "contract IPhiFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "protocolFeeDestination", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "royalties", "outputs": [ { "internalType": "uint32", "name": "royaltyBPS", "type": "uint32" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from_", "type": "address" }, { "internalType": "address", "name": "to_", "type": "address" }, { "internalType": "uint256[]", "name": "ids_", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values_", "type": "uint256[]" }, { "internalType": "bytes", "name": "data_", "type": "bytes" } ], "name": "safeBatchTransferFrom", "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": "uint256", "name": "value_", "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": [], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "signatureClaim", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "soulBounded", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": [], "name": "tokenIdCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unPause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" }, { "components": [ { "internalType": "uint32", "name": "royaltyBPS", "type": "uint32" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" } ], "internalType": "struct ICreatorRoyaltiesControl.RoyaltyConfiguration", "name": "configuration", "type": "tuple" } ], "name": "updateRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" }, { "internalType": "address", "name": "minter_", "type": "address" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "verificationType", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051614ec96100fd600039600081816124f80152818161252101526126d60152614ec96000f3fe6080604052600436106103375760003560e01c80638a35ace3116101b0578063dd762a5f116100ec578063f242432a11610095578063f50b31b71161006f578063f50b31b714610a43578063f7b188a514610a4b578063feb1da4b14610a60578063feb3621814610a9857600080fd5b8063f242432a146109f0578063f2fde38b14610a10578063f348fd0014610a3057600080fd5b8063e752c44a116100c6578063e752c44a1461096b578063e8a3d48514610973578063e985e9c51461098857600080fd5b8063dd762a5f14610916578063e30c397814610943578063e4598fa61461095857600080fd5b8063ad3cb1cc11610159578063ce852f9f11610133578063ce852f9f146108a3578063d8210936146108c3578063d95cbbc9146108d8578063db968e08146108f857600080fd5b8063ad3cb1cc146107e1578063bb3bafd61461082a578063bd85b0391461085757600080fd5b806398bdf6f51161018a57806398bdf6f51461078b578063a22cb465146107a1578063a747a3ea146107c157600080fd5b80638a35ace3146107415780638da5cb5b1461076157806395d89b411461077657600080fd5b80634ce7957c1161027f5780635c975abb1161022857806379ba50971161020257806379ba50971461068d5780637ab9ffc9146106a25780637f77f574146106c25780638456cb591461072c57600080fd5b80635c975abb1461062c578063715018a61461066357806375e8c48d1461067857600080fd5b80634f558e79116102595780634f558e79146105b557806352d1902d1461060357806354fd4d501461061857600080fd5b80634ce7957c1461053d5780634e1273f4146105755780634f1ef286146105a257600080fd5b806318160ddd116102e15780632a55205a116102bb5780632a55205a146104c65780632eb2c2d6146105055780634977bc261461052757600080fd5b806318160ddd146104425780631e7269c51461047657806322720318146104a657600080fd5b806306fdde031161031257806306fdde03146103d35780630e89341c146103f55780631585cc641461041557600080fd5b8062fdd58e1461034357806301ffc9a71461037657806303ce5e11146103a657600080fd5b3661033e57005b600080fd5b34801561034f57600080fd5b5061036361035e366004613ac3565b610aae565b6040519081526020015b60405180910390f35b34801561038257600080fd5b50610396610391366004613b1d565b610af7565b604051901515815260200161036d565b3480156103b257600080fd5b506103636103c1366004613b3a565b6000908152600a602052604090205490565b3480156103df57600080fd5b506103e8610b99565b60405161036d9190613ba3565b34801561040157600080fd5b506103e8610410366004613b3a565b610c27565b34801561042157600080fd5b50610363610430366004613b3a565b6000908152600b602052604090205490565b34801561044e57600080fd5b507f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154610363565b34801561048257600080fd5b50610396610491366004613bb6565b600c6020526000908152604090205460ff1681565b3480156104b257600080fd5b506103966104c1366004613b3a565b610cc3565b3480156104d257600080fd5b506104e66104e1366004613bd3565b610d6d565b604080516001600160a01b03909316835260208301919091520161036d565b34801561051157600080fd5b50610525610520366004613dae565b610db0565b005b34801561053357600080fd5b5061036360055481565b34801561054957600080fd5b5060035461055d906001600160a01b031681565b6040516001600160a01b03909116815260200161036d565b34801561058157600080fd5b50610595610590366004613e5c565b610ef4565b60405161036d9190613f5a565b6105256105b0366004613f6d565b610fda565b3480156105c157600080fd5b506103966105d0366004613b3a565b60009081527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e28006020526040902054151590565b34801561060f57600080fd5b50610363610ff9565b34801561062457600080fd5b506001610363565b34801561063857600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610396565b34801561066f57600080fd5b50610525611028565b34801561068457600080fd5b5061052561103c565b34801561069957600080fd5b50610525611067565b3480156106ae57600080fd5b5060025461055d906001600160a01b031681565b3480156106ce57600080fd5b506107086106dd366004613b3a565b60006020819052908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520161036d565b34801561073857600080fd5b506105256110c8565b34801561074d57600080fd5b5061036361075c366004613b3a565b6110d8565b34801561076d57600080fd5b5061055d611182565b34801561078257600080fd5b506103e86111b7565b34801561079757600080fd5b5061036360065481565b3480156107ad57600080fd5b506105256107bc366004613fc1565b6111c4565b3480156107cd57600080fd5b506103e86107dc366004613ffa565b6111cf565b3480156107ed57600080fd5b506103e86040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561083657600080fd5b5061084a610845366004613b3a565b611362565b60405161036d919061401f565b34801561086357600080fd5b50610363610872366004613b3a565b60009081527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604090205490565b3480156108af57600080fd5b506105256108be366004614057565b611435565b3480156108cf57600080fd5b506103e8611550565b3480156108e457600080fd5b506105256108f33660046140b8565b61155d565b34801561090457600080fd5b506002546001600160a01b031661055d565b34801561092257600080fd5b50610936610931366004613b3a565b6118ad565b60405161036d919061411b565b34801561094f57600080fd5b5061055d6119c9565b610525610966366004614268565b6119f2565b610525611cfa565b34801561097f57600080fd5b506103e8611e1c565b34801561099457600080fd5b506103966109a336600461432f565b6001600160a01b0391821660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b3480156109fc57600080fd5b50610525610a0b36600461435d565b611ea9565b348015610a1c57600080fd5b50610525610a2b366004613bb6565b611fb2565b610363610a3e366004613b3a565b61204f565b6105256121d6565b348015610a5757600080fd5b50610525612367565b348015610a6c57600080fd5b50610363610a7b366004613ffa565b600d60209081526000928352604080842090915290825290205481565b348015610aa457600080fd5b5061036360045481565b60008181527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602090815260408083206001600160a01b03861684529091529020545b92915050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161480610b8a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f7b9e063a00000000000000000000000000000000000000000000000000000000145b80610af15750610af182612377565b60078054610ba6906143c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd2906143c6565b8015610c1f5780601f10610bf457610100808354040283529160200191610c1f565b820191906000526020600020905b815481529060010190602001808311610c0257829003601f168201915b505050505081565b6002546000828152600b6020526040908190205490517f3bb3a24d00000000000000000000000000000000000000000000000000000000815260048101919091526060916001600160a01b031690633bb3a24d90602401600060405180830381865afa158015610c9b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610af19190810190614466565b6002546000828152600b60205260408082205490517fe803845400000000000000000000000000000000000000000000000000000000815291926001600160a01b03169163e803845491610d1d9160040190815260200190565b600060405180830381865afa158015610d3a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d6291908101906144f3565b6101e0015192915050565b6000806000610d7b85611362565b905061271084826000015163ffffffff16610d969190614682565b610da09190614699565b6020909101519590945092505050565b60005b8351811015610e30576001600160a01b03861615801590610df15750610df1848281518110610de457610de46146d4565b6020026020010151610cc3565b15610e28576040517fc8fb086200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101610db3565b50336001600160a01b0386168114801590610e9057506001600160a01b0380871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b15610edf576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b038083166004830152871660248201526044015b60405180910390fd5b610eec868686868661245a565b505050505050565b60608151835114610f3e57815183516040517f5b05999100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610ed6565b6000835167ffffffffffffffff811115610f5a57610f5a613bf5565b604051908082528060200260200182016040528015610f83578160200160208202803683370190505b50905060005b8451811015610fd257602080820286010151610fad90602080840287010151610aae565b828281518110610fbf57610fbf6146d4565b6020908102919091010152600101610f89565b509392505050565b610fe26124ed565b610feb826125bd565b610ff582826125c5565b5050565b60006110036126cb565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61103061272d565b61103a6000612778565b565b6040517fa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad96290600090a1565b33806110716119c9565b6001600160a01b0316146110bc576040517f118cdaa70000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610ed6565b6110c581612778565b50565b6110d061272d565b61103a6127c8565b6002546000828152600b60205260408082205490517fe803845400000000000000000000000000000000000000000000000000000000815291926001600160a01b03169163e8038454916111329160040190815260200190565b600060405180830381865afa15801561114f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261117791908101906144f3565b610160015192915050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b60088054610ba6906143c6565b610ff533838361285b565b6000828152600e602090815260408083206001600160a01b0385168452909152812080546060929190611201906143c6565b905011156112bb576000838152600e602090815260408083206001600160a01b038616845290915290208054611236906143c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611262906143c6565b80156112af5780601f10611284576101008083540402835291602001916112af565b820191906000526020600020905b81548152906001019060200180831161129257829003601f168201915b50505050509050610af1565b6002546000848152600b6020526040908190205490517f3bb3a24d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691633bb3a24d916113169160040190815260200190565b600060405180830381865afa158015611333573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261135b9190810190614466565b9050610af1565b604080518082019091526000808252602082015260015474010000000000000000000000000000000000000000900460ff166113ca576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902082518084019093525463ffffffff8116835264010000000090046001600160a01b03169082018190521561140e5792915050565b5050604080518082019091526101f481526001546001600160a01b03166020820152919050565b6000828152600b60205260408082205460025491517fe803845400000000000000000000000000000000000000000000000000000000815260048101829052859391926001600160a01b03169063e803845490602401600060405180830381865afa1580156114a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114d091908101906144f3565b60e001519050336001600160a01b0382161480159061150857506114f2611182565b6001600160a01b0316336001600160a01b031614155b1561153f576040517f5336652700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611549858561294d565b5050505050565b60098054610ba6906143c6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115a85750825b905060008267ffffffffffffffff1660011480156115c55750303b155b9050811580156115d3575080155b1561160a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561166b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61167433612a3e565b61167c612a4f565b611684612a5f565b61168d86612a6f565b6001600655600489905560058890556116a588612b54565b6116ae8a612b54565b6040516020016116bf929190614703565b604051602081830303815290604052600790816116dc91906147cc565b506116e688612b54565b6116ef8a612b54565b6040516020016117009291906148c8565b6040516020818303038152906040526008908161171d91906147cc565b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001633908117909155604080517f4ce7957c0000000000000000000000000000000000000000000000000000000081529051634ce7957c916004808201926020929091908290030181865afa15801561179f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c39190614949565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055600961180788826147cc565b507f78a14acf80e1fe2c4c8c269c69029fd4bd136b3cabc4b7506cebc695eaa6da848888604051611839929190614966565b60405180910390a183156118a25784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b61193f6040805161020081018252600080825260208083018290528284018290526060808401819052608084015260a0830182905260c0830182905260e083018290526101008301829052835180850190945281845283015290610120820190815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b6002546040517fe8038454000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b039091169063e803845490602401600060405180830381865afa1580156119a1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610af191908101906144f3565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006111a7565b6119fa612b98565b6002546001600160a01b03163314611a3e576040517f04117f5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000888152600a602052604081205490819003611a87576040517f4ea0703b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a95888287868689612bf4565b6002546040517fe8038454000000000000000000000000000000000000000000000000000000008152600481018b90526000916001600160a01b03169063e803845490602401600060405180830381865afa158015611af8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b2091908101906144f3565b6101000151604080516001600160a01b03808d16602083015280841692820192909252818b166060820152908916608082015290915060009060a00160408051601f198184030181528282526002547fceedf7ce00000000000000000000000000000000000000000000000000000000845291519093506001600160a01b039091169163ceedf7ce9160048083019260209291908290030181865afa158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf19190614949565b6001600160a01b03166388580db7348d6005548b611c0e896110d8565b8746600454146040518863ffffffff1660e01b8152600401611c359695949392919061497f565b6000604051808303818588803b158015611c4e57600080fd5b505af1158015611c62573d6000803e3d6000fd5b5050505050886001600160a01b0316826001600160a01b03168b6001600160a01b03167f2261ff6e337004155fe956f4926f6ae60a995343238ee9e37498d56c2fd875b28b8f888d8d604051611ce59594939291906001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b60405180910390a45050505050505050505050565b6000806000806000806000611d0d612cdc565b96509650965096509650965096506000611d33856000908152600b602052604090205490565b90506000611d496002546001600160a01b031690565b604080516001600160a01b038c811660208301528a81168284015260608083018790528351808403909101815260e083018452608083018b815260a084018b905260c090930188905292517fb8dbe8190000000000000000000000000000000000000000000000000000000081529394509192909184169063b8dbe819903490611ddd908e90879087908d906004016149e8565b6000604051808303818588803b158015611df657600080fd5b505af1158015611e0a573d6000803e3d6000fd5b50505050505050505050505050505050565b6002546040517e844d130000000000000000000000000000000000000000000000000000000081523060048201526060916001600160a01b03169062844d1390602401600060405180830381865afa158015611e7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ea49190810190614466565b905090565b6001600160a01b03851615801590611ec55750611ec583610cc3565b15611efc576040517fc8fb086200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b0386168114801590611f5b57506001600160a01b0380871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b15611fa5576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b03808316600483015287166024820152604401610ed6565b610eec8686868686612d52565b611fba61272d565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081178255612016611182565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b6002546000906001600160a01b03163314612096576040517f04117f5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61209e612b98565b6006546000838152600a60209081526040808320849055928252600b815282822085905560025483517f818849e2000000000000000000000000000000000000000000000000000000008152935192936001600160a01b039091169263818849e2926004808401939192918290030181865afa158015612122573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121469190614a5d565b60035490915061215f906001600160a01b031682612e13565b6006546040805185815260208101929092527fbdcf05321b109dde965a4c49b2cf4ff68e47300539f1bea56ed319cd5e207448910160405180910390a1600680546001810190915560006121b38334614a76565b11156121cd576121cd6121c68334614a76565b3390612e13565b9150505b919050565b60008080808080808080806121ee3660048184614a89565b8101906121fb9190614abe565b99509950995099509950995099509950995099506000612227866000908152600b602052604090205490565b60408051602081018790526001600160a01b03808b1692820192909252818c166060820152908a16608082015260a081018290524660c082015260e081018490529091506000906101000160408051601f19818403018152828252602083018f90529082018d90529150600090606001604051602081830303815290604052905060006122bc6002546001600160a01b031690565b604080516060810182528b8152602081018b905280820189905290517fa736244e000000000000000000000000000000000000000000000000000000008152919250906001600160a01b0383169063a736244e90349061232490879089908790600401614b6f565b6000604051808303818588803b15801561233d57600080fd5b505af1158015612351573d6000803e3d6000fd5b5050505050505050505050505050505050505050565b61236f61272d565b61103a612e2f565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061240a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b80610af157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610af1565b6001600160a01b03841661249d576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610ed6565b6001600160a01b0385166124e0576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610ed6565b6115498585858585612ea5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061258657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661257a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561103a576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110c561272d565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561261f575060408051601f3d908101601f1916820190925261261c91810190614a5d565b60015b612660576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610ed6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146126bc576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610ed6565b6126c68383612ef8565b505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461103a576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33612736611182565b6001600160a01b03161461103a576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ed6565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155610ff582612f4e565b6127d0612b98565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006001600160a01b0383166128bf576040517fced3e10000000000000000000000000000000000000000000000000000000000815260006004820152602401610ed6565b6001600160a01b03848116600081815260018401602090815260408083209488168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b60208101516001600160a01b031615801561296e5750805163ffffffff1615155b156129a5576040517f47d85f5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083518154928501516001600160a01b0316640100000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931663ffffffff9091161791909117905551339083907fac6c25c236bd3d770d0d5fe9beb97491ac12458babd4e48ca0bf86a9517c62fe90612a3290859061401f565b60405180910390a35050565b612a46612fd7565b6110c58161303e565b612a57612fd7565b61103a613089565b612a67612fd7565b61103a6130da565b6001600160a01b038116612aaf576040517f47d85f5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015474010000000000000000000000000000000000000000900460ff1615612b04576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffff000000000000000000000000000000000000000000166001600160a01b039092169190911774010000000000000000000000000000000000000000179055565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a900480612b6f575050819003601f19909101908152919050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561103a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000858152600d602090815260408083206001600160a01b038a16808552908352818420859055888452600e83528184209084529091529020612c38838583614bb2565b506001600160a01b0386166000908152600c602052604090205460ff16612c9b576001600160a01b0386166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b610eec8686866040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250613108565b600060608180808084610104361015612d21576040517fdcf7a19a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d2f366004816000614a89565b810190612d3c9190614cae565b959d949c50929a50909850965094509092509050565b6001600160a01b038416612d95576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610ed6565b6001600160a01b038516612dd8576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610ed6565b60408051600180825260208201869052818301908152606082018590526080820190925290612e0a8787848487612ea5565b50505050505050565b60003860003884865af1610ff55763b12d13eb6000526004601cfd5b612e3761317e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361283d565b612eb1858585856131d9565b6001600160a01b038416156115495782513390600103612eea5760208481015190840151612ee3838989858589613349565b5050610eec565b610eec8187878787876134e9565b612f0182613635565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612f46576126c682826136dd565b610ff5613753565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661103a576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613046612fd7565b6001600160a01b0381166110bc576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610ed6565b613091612fd7565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6130e2612fd7565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b03841661314b576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610ed6565b60408051600180825260208201869052818301908152606082018590526080820190925290610eec600087848487612ea5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661103a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e28006132068585858561378b565b6001600160a01b0385166132b4576000805b8451811015613298576000848281518110613235576132356146d4565b6020026020010151905080846000016000888581518110613258576132586146d4565b60200260200101518152602001908152602001600020600082825461327d9190614daa565b9091555061328d90508184614daa565b925050600101613218565b50808260010160008282546132ad9190614daa565b9091555050505b6001600160a01b038416611549576000805b84518110156133355760008482815181106132e3576132e36146d4565b6020026020010151905080846000016000888581518110613306576133066146d4565b6020908102919091018101518252810191909152604001600020805491909103905591909101906001016132c6565b506001820180549190910390555050505050565b6001600160a01b0384163b15610eec576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e61906133a69089908990889088908890600401614dbd565b6020604051808303816000875af19250505080156133e1575060408051601f3d908101601f191682019092526133de91810190614e00565b60015b613463573d80801561340f576040519150601f19603f3d011682016040523d82523d6000602084013e613414565b606091505b50805160000361345b576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610ed6565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014612e0a576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610ed6565b6001600160a01b0384163b15610eec576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c81906135469089908990889088908890600401614e1d565b6020604051808303816000875af1925050508015613581575060408051601f3d908101601f1916820190925261357e91810190614e00565b60015b6135af573d80801561340f576040519150601f19603f3d011682016040523d82523d6000602084013e613414565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014612e0a576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610ed6565b806001600160a01b03163b600003613684576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610ed6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516136fa9190614e7b565b600060405180830381855af49150503d8060008114613735576040519150601f19603f3d011682016040523d82523d6000602084013e61373a565b606091505b509150915061374a8583836139f4565b95945050505050565b341561103a576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805182517f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450091146137f557825182516040517f5b05999100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610ed6565b3360005b8451811015613914576020818102868101820151908601909101516001600160a01b038916156138c5576000828152602086815260408083206001600160a01b038d1684529091529020548181101561389e576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038b166004820152602481018290526044810183905260648101849052608401610ed6565b6000838152602087815260408083206001600160a01b038e16845290915290209082900390555b6001600160a01b0388161561390a576000828152602086815260408083206001600160a01b038c16845290915281208054839290613904908490614daa565b90915550505b50506001016137f9565b5083516001036139955760208401516000906020850151909150866001600160a01b0316886001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051613986929190918252602082015260400190565b60405180910390a45050610eec565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516139e4929190614e97565b60405180910390a4505050505050565b606082613a0957613a0482613a6c565b613a65565b8151158015613a2057506001600160a01b0384163b155b15613a62576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610ed6565b50805b9392505050565b805115613a7c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811681146110c557600080fd5b60008060408385031215613ad657600080fd5b8235613ae181613aae565b946020939093013593505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146110c557600080fd5b600060208284031215613b2f57600080fd5b8135613a6581613aef565b600060208284031215613b4c57600080fd5b5035919050565b60005b83811015613b6e578181015183820152602001613b56565b50506000910152565b60008151808452613b8f816020860160208601613b53565b601f01601f19169290920160200192915050565b602081526000613a656020830184613b77565b600060208284031215613bc857600080fd5b8135613a6581613aae565b60008060408385031215613be657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613c4757613c47613bf5565b60405290565b604051610200810167ffffffffffffffff81118282101715613c4757613c47613bf5565b604051601f8201601f1916810167ffffffffffffffff81118282101715613c9a57613c9a613bf5565b604052919050565b600067ffffffffffffffff821115613cbc57613cbc613bf5565b5060051b60200190565b600082601f830112613cd757600080fd5b81356020613cec613ce783613ca2565b613c71565b8083825260208201915060208460051b870101935086841115613d0e57600080fd5b602086015b84811015613d2a5780358352918301918301613d13565b509695505050505050565b600067ffffffffffffffff821115613d4f57613d4f613bf5565b50601f01601f191660200190565b600082601f830112613d6e57600080fd5b8135613d7c613ce782613d35565b818152846020838601011115613d9157600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215613dc657600080fd5b8535613dd181613aae565b94506020860135613de181613aae565b9350604086013567ffffffffffffffff80821115613dfe57600080fd5b613e0a89838a01613cc6565b94506060880135915080821115613e2057600080fd5b613e2c89838a01613cc6565b93506080880135915080821115613e4257600080fd5b50613e4f88828901613d5d565b9150509295509295909350565b60008060408385031215613e6f57600080fd5b823567ffffffffffffffff80821115613e8757600080fd5b818501915085601f830112613e9b57600080fd5b81356020613eab613ce783613ca2565b82815260059290921b84018101918181019089841115613eca57600080fd5b948201945b83861015613ef1578535613ee281613aae565b82529482019490820190613ecf565b96505086013592505080821115613f0757600080fd5b50613f1485828601613cc6565b9150509250929050565b60008151808452602080850194506020840160005b83811015613f4f57815187529582019590820190600101613f33565b509495945050505050565b602081526000613a656020830184613f1e565b60008060408385031215613f8057600080fd5b8235613f8b81613aae565b9150602083013567ffffffffffffffff811115613fa757600080fd5b613f1485828601613d5d565b80151581146110c557600080fd5b60008060408385031215613fd457600080fd5b8235613fdf81613aae565b91506020830135613fef81613fb3565b809150509250929050565b6000806040838503121561400d57600080fd5b823591506020830135613fef81613aae565b815163ffffffff1681526020808301516001600160a01b03169082015260408101610af1565b63ffffffff811681146110c557600080fd5b600080828403606081121561406b57600080fd5b833592506040601f198201121561408157600080fd5b5061408a613c24565b602084013561409881614045565b815260408401356140a881613aae565b6020820152919491935090915050565b600080600080608085870312156140ce57600080fd5b8435935060208501359250604085013567ffffffffffffffff8111156140f357600080fd5b6140ff87828801613d5d565b925050606085013561411081613aae565b939692955090935050565b60208152815160208201526000602083015161414260408401826001600160a01b03169052565b50604083015160608301526060830151610220806080850152614169610240850183613b77565b91506080850151601f198584030160a08601526141868382613b77565b92505060a08501516141a360c08601826001600160a01b03169052565b5060c085015160e085015260e08501516101006141ca818701836001600160a01b03169052565b86015190506101206141e6868201836001600160a01b03169052565b860151905061014061421386820183805163ffffffff1682526020908101516001600160a01b0316910152565b860151610180868101919091526101608701516101a080880191909152908701516101c080880191909152908701516101e0808801919091529087015161020087015290950151151593019290925250919050565b60008060008060008060008060e0898b03121561428457600080fd5b88359750602089013561429681613aae565b965060408901356142a681613aae565b955060608901356142b681613aae565b94506080890135935060a0890135925060c089013567ffffffffffffffff808211156142e157600080fd5b818b0191508b601f8301126142f557600080fd5b81358181111561430457600080fd5b8c602082850101111561431657600080fd5b6020830194508093505050509295985092959890939650565b6000806040838503121561434257600080fd5b823561434d81613aae565b91506020830135613fef81613aae565b600080600080600060a0868803121561437557600080fd5b853561438081613aae565b9450602086013561439081613aae565b93506040860135925060608601359150608086013567ffffffffffffffff8111156143ba57600080fd5b613e4f88828901613d5d565b600181811c908216806143da57607f821691505b602082108103614413577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261442a57600080fd5b8151614438613ce782613d35565b81815284602083860101111561444d57600080fd5b61445e826020830160208701613b53565b949350505050565b60006020828403121561447857600080fd5b815167ffffffffffffffff81111561448f57600080fd5b61445e84828501614419565b80516121d181613aae565b6000604082840312156144b857600080fd5b6144c0613c24565b905081516144cd81614045565b815260208201516144dd81613aae565b602082015292915050565b80516121d181613fb3565b60006020828403121561450557600080fd5b815167ffffffffffffffff8082111561451d57600080fd5b90830190610220828603121561453257600080fd5b61453a613c4d565b8251815261454a6020840161449b565b60208201526040830151604082015260608301518281111561456b57600080fd5b61457787828601614419565b60608301525060808301518281111561458f57600080fd5b61459b87828601614419565b6080830152506145ad60a0840161449b565b60a082015260c083015160c08201526145c860e0840161449b565b60e082015261010091506145dd82840161449b565b8282015261012091506145f2868385016144a6565b8282015261016091508183015161014082015261018080840151838301526101a092508284015181830152506101c080840151838301526101e0925082840151818301525061464461020084016144e8565b91810191909152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610af157610af1614653565b6000826146cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f50686920437265642d000000000000000000000000000000000000000000000081526000835161473b816009850160208801613b53565b7f206f6e20436861696e2d000000000000000000000000000000000000000000006009918401918201528351614778816013840160208801613b53565b01601301949350505050565b601f8211156126c6576000816000526020600020601f850160051c810160208610156147ad5750805b601f850160051c820191505b81811015610eec578281556001016147b9565b815167ffffffffffffffff8111156147e6576147e6613bf5565b6147fa816147f484546143c6565b84614784565b602080601f83116001811461484d57600084156148175750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610eec565b600085815260208120601f198616915b8281101561487c5788860151825594840194600190910190840161485d565b50858210156148b857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f5048492d00000000000000000000000000000000000000000000000000000000815260008351614900816004850160208801613b53565b7f2d00000000000000000000000000000000000000000000000000000000000000600491840191820152835161493d816005840160208801613b53565b01600501949350505050565b60006020828403121561495b57600080fd5b8151613a6581613aae565b82815260406020820152600061445e6040830184613b77565b86815285602082015284604082015283606082015260c0608082015260006149aa60c0830185613b77565b905082151560a0830152979650505050505050565b8051825260208101516020830152600060408201516060604085015261445e6060850182613b77565b6080808252855190820181905260009060209060a0840190828901845b82811015614a2157815184529284019290840190600101614a05565b5050508381036020850152614a368188613b77565b9150508281036040840152614a4b81866149bf565b91505082606083015295945050505050565b600060208284031215614a6f57600080fd5b5051919050565b81810381811115610af157610af1614653565b60008085851115614a9957600080fd5b83861115614aa657600080fd5b5050820193919092039150565b80356121d181613aae565b6000806000806000806000806000806101408b8d031215614ade57600080fd5b8a35995060208b0135985060408b0135614af781613aae565b975060608b0135614b0781613aae565b965060808b0135614b1781613aae565b955060a08b0135945060c08b0135935060e08b013592506101008b013567ffffffffffffffff811115614b4957600080fd5b614b558d828e01613d5d565b9250506101208b013590509295989b9194979a5092959850565b606081526000614b826060830186613b77565b8281036020840152614b948186613b77565b90508281036040840152614ba881856149bf565b9695505050505050565b67ffffffffffffffff831115614bca57614bca613bf5565b614bde83614bd883546143c6565b83614784565b6000601f841160018114614c305760008515614bfa5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611549565b600083815260209020601f19861690835b82811015614c615786850135825560209485019460019092019101614c41565b5086821015614c9c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b600080600080600080600060e0888a031215614cc957600080fd5b8735614cd481613aae565b965060208881013567ffffffffffffffff80821115614cf257600080fd5b818b0191508b601f830112614d0657600080fd5b8135614d14613ce782613ca2565b81815260059190911b8301840190848101908e831115614d3357600080fd5b938501935b82851015614d5157843582529385019390850190614d38565b9a50614d6291505060408c01614ab3565b975060608b0135965060808b0135955060a08b0135945060c08b0135925080831115614d8d57600080fd5b5050614d9b8a828b01613d5d565b91505092959891949750929550565b80820180821115610af157610af1614653565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152614df560a0830184613b77565b979650505050505050565b600060208284031215614e1257600080fd5b8151613a6581613aef565b60006001600160a01b03808816835280871660208401525060a06040830152614e4960a0830186613f1e565b8281036060840152614e5b8186613f1e565b90508281036080840152614e6f8185613b77565b98975050505050505050565b60008251614e8d818460208701613b53565b9190910192915050565b604081526000614eaa6040830185613f1e565b828103602084015261374a8185613f1e56fea164736f6c6343000819000a