[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "AdminRole_Caller_Does_Not_Have_Admin_Role", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [], "name": "LazyMintedCollection_Mint_Count_Must_Be_Greater_Than_Zero", "type": "error" }, { "inputs": [], "name": "MinterRole_Caller_Does_Not_Have_Minter_Or_Admin_Role", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "maxTokenId", "type": "uint256" } ], "name": "NFTDropCollection_Exceeds_Max_Token_Id", "type": "error" }, { "inputs": [], "name": "NotInitializing", "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": "RevealableCollection_Already_Revealed", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "totalSupply", "type": "uint256" } ], "name": "SelfDestructibleCollection_Minted_NFTs_Must_Be_Burned_First", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "inputs": [], "name": "StringsLibrary_Required_String_Is_Empty", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "supplyLockExpiration", "type": "uint256" } ], "name": "SupplyLock_Action_Disallowed_While_Supply_Is_Locked", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "supplyLockHolder", "type": "address" }, { "internalType": "uint256", "name": "supplyLockExpiration", "type": "uint256" } ], "name": "SupplyLock_Caller_Is_Not_Supply_Lock_Holder", "type": "error" }, { "inputs": [], "name": "SupplyLock_Existing_Lock_Has_Already_Expired", "type": "error" }, { "inputs": [], "name": "SupplyLock_Expiration_Time_In_The_Past", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "maxExpiration", "type": "uint256" } ], "name": "SupplyLock_Expiration_Time_Too_Far_In_The_Future", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "currentMaxTokenId", "type": "uint256" } ], "name": "TokenLimitedCollection_Max_Token_Id_May_Not_Be_Cleared", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "currentMaxTokenId", "type": "uint256" } ], "name": "TokenLimitedCollection_Max_Token_Id_May_Not_Increase", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "currentMintedCount", "type": "uint256" } ], "name": "TokenLimitedCollection_Max_Token_Id_Must_Be_Greater_Than_Current_Minted_Count", "type": "error" }, { "inputs": [], "name": "TokenLimitedCollection_Max_Token_Id_Must_Not_Be_Zero", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "maxTokenId", "type": "uint256" } ], "name": "MaxTokenIdUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "supplyLock", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "supplyLockExpiration", "type": "uint256" } ], "name": "MinterAcquireSupplyLock", "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": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" } ], "name": "SelfDestruct", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "baseURI", "type": "string" }, { "indexed": false, "internalType": "bool", "name": "isRevealed", "type": "bool" } ], "name": "URIUpdated", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "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": "baseURI", "outputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "getFeeBps", "outputs": [ { "internalType": "uint256[]", "name": "royaltiesInBasisPoints", "type": "uint256[]" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getFeeRecipients", "outputs": [ { "internalType": "address payable[]", "name": "recipients", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getNFTCollectionType", "outputs": [ { "internalType": "string", "name": "collectionType", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getRoyalties", "outputs": [ { "internalType": "address payable[]", "name": "recipients", "type": "address[]" }, { "internalType": "uint256[]", "name": "royaltiesInBasisPoints", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSupplyLock", "outputs": [ { "internalType": "address", "name": "supplyLockHolder", "type": "address" }, { "internalType": "uint256", "name": "supplyLockExpiration", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getTokenCreatorPaymentAddress", "outputs": [ { "internalType": "address payable", "name": "creatorPaymentAddress", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "accountHasRole", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address payable", "name": "creator", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "string", "name": "baseURI", "type": "string" }, { "internalType": "bool", "name": "isRevealed", "type": "bool" }, { "internalType": "uint32", "name": "maxTokenId", "type": "uint32" }, { "internalType": "address", "name": "approvedMinter", "type": "address" }, { "internalType": "address payable", "name": "paymentAddress", "type": "address" } ], "internalType": "struct INFTDropCollectionInitializer.NFTDropCollectionInitializeParams", "name": "params", "type": "tuple" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isAdmin", "outputs": [ { "internalType": "bool", "name": "approved", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isMinter", "outputs": [ { "internalType": "bool", "name": "approved", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isRevealed", "outputs": [ { "internalType": "bool", "name": "revealed", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "latestTokenId", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTokenId", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "count", "type": "uint16" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "mintCountTo", "outputs": [ { "internalType": "uint256", "name": "firstTokenId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "expiration", "type": "uint256" } ], "name": "minterAcquireSupplyLock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "numberOfTokensAvailableToMint", "outputs": [ { "internalType": "uint256", "name": "count", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "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": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "baseURI_", "type": "string" } ], "name": "reveal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "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": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "selfDestruct", "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": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "isSupported", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "tokenCreator", "outputs": [ { "internalType": "address payable", "name": "creator", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "supply", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_maxTokenId", "type": "uint32" } ], "name": "updateMaxTokenId", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "baseURI_", "type": "string" } ], "name": "updatePreRevealContent", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60a060405234801561001057600080fd5b5060408051808201909152601381527f4e46542044726f7020436f6c6c656374696f6e00000000000000000000000000602082015261004e81610176565b608052507ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0080546001600160401b03919068010000000000000000900460ff16806100a6575080546001600160401b03808416911610155b156100c45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617680100000000000000001781556040805160608101909152602280825261012891906144ba602083013960408051808201909152600781526604e465444726f760cc1b60208201526101bd565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050610426565b600080829050601f815111156101aa578260405163305a27a960e01b81526004016101a19190610256565b60405180910390fd5b80516101b5826102a5565b179392505050565b6101c5610206565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300806101f18482610367565b50600181016102008382610367565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661025457604051631afcd79f60e31b815260040160405180910390fd5b565b60006020808352835180602085015260005b8181101561028457858101830151858201604001528201610268565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156102c6576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806102f657607f821691505b6020821081036102c657634e487b7160e01b600052602260045260246000fd5b601f821115610362576000816000526020600020601f850160051c8101602086101561033f5750805b601f850160051c820191505b8181101561035e5782815560010161034b565b5050505b505050565b81516001600160401b03811115610380576103806102cc565b6103948161038e84546102e2565b84610316565b602080601f8311600181146103c957600084156103b15750858301515b600019600386901b1c1916600185901b17855561035e565b600085815260208120601f198616915b828110156103f8578886015182559484019460019091019084016103d9565b50858210156104165787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614079610441600039600061161f01526140796000f3fe608060405234801561001057600080fd5b50600436106103575760003560e01c806372c7dbbe116101c8578063b9c4d9fb11610104578063dfea951d116100a2578063e985e9c51161007c578063e985e9c5146107a9578063ec5f752e14610811578063f2fde38b14610824578063ff35819b1461083757600080fd5b8063dfea951d14610786578063e26d63bc1461078e578063e30c3978146107a157600080fd5b8063cfbd4885116100de578063cfbd488514610726578063d115124914610739578063d53913931461074c578063d547741f1461077357600080fd5b8063b9c4d9fb146106d2578063bb3bafd6146106f2578063c87b56dd1461071357600080fd5b806391d1485411610171578063a217fddf1161014b578063a217fddf14610691578063a22cb46514610699578063aa271e1a146106ac578063b88d4fde146106bf57600080fd5b806391d148541461066e57806395d89b41146106815780639cb8a26a1461068957600080fd5b80638c0e8349116101a25780638c0e8349146106235780638da5cb5b1461064957806391ba317a1461065157600080fd5b806372c7dbbe146105e357806379ba5097146105f65780638ae3e5f1146105fe57600080fd5b80632d3456701161029757806342966c68116102405780636352211e1161021a5780636352211e146105ad5780636c0360eb146105c057806370a08231146105c8578063715018a6146105db57600080fd5b806342966c68146105635780634c2612471461057657806354214f691461058957600080fd5b806336568abe1161027157806336568abe1461052a57806340c1a0641461053d57806342842e0e1461055057600080fd5b80632d345670146104f15780632f2ff15d1461050457806335bb3e161461051757600080fd5b80631ae859541161030457806324d7806c116102de57806324d7806c146104a557806324ef95e7146104b8578063261707fa146104cb5780632a55205a146104de57600080fd5b80631ae859541461041c57806323b872dd14610450578063248a9ca31461046357600080fd5b8063095ea7b311610335578063095ea7b3146103d15780630ebd4c7f146103e657806318160ddd1461040657600080fd5b806301ffc9a71461035c57806306fdde0314610384578063081812fc14610399575b600080fd5b61036f61036a36600461363f565b61084a565b60405190151581526020015b60405180910390f35b61038c61085b565b60405161037b91906136ca565b6103ac6103a73660046136dd565b610911565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b6103e46103df366004613718565b610966565b005b6103f96103f43660046136dd565b610975565b60405161037b9190613780565b61040e6109cc565b60405190815260200161037b565b6104246109db565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520161037b565b6103e461045e366004613793565b610a30565b61040e6104713660046136dd565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b61036f6104b33660046137d4565b610b26565b6103e46104c63660046136dd565b610b32565b6103e46104d93660046137d4565b610dc1565b6104246104ec3660046137f1565b610deb565b6103e46104ff3660046137d4565b610e03565b6103e4610512366004613813565b610e0e565b6103e46105253660046137d4565b610e52565b6103e4610538366004613813565b610e5d565b6103ac61054b3660046136dd565b610ebb565b6103e461055e366004613793565b610ec5565b6103e46105713660046136dd565b610ee0565b6103e4610584366004613843565b610eec565b6103ea5474010000000000000000000000000000000000000000900460ff1661036f565b6103ac6105bb3660046136dd565b61102d565b61038c611038565b61040e6105d63660046137d4565b611042565b6103e46110e3565b6103e46105f1366004613843565b6110f7565b6103e4611193565b6103e85463ffffffff808216680100000000000000009092048116919091031661040e565b6103e8546106349063ffffffff1681565b60405163ffffffff909116815260200161037b565b6103ac61120b565b6103e8546106349068010000000000000000900463ffffffff1681565b61036f61067c366004613813565b61124d565b61038c6112f6565b6103e4611347565b61040e600081565b6103e46106a73660046138c5565b611357565b61036f6106ba3660046137d4565b611362565b6103e46106cd366004613929565b61138e565b6106e56106e03660046136dd565b6113a5565b60405161037b9190613a6e565b6107056107003660046136dd565b611422565b60405161037b929190613a81565b61038c6107213660046136dd565b6114db565b6103e46107343660046137d4565b61151f565b61040e610747366004613aaf565b611549565b61040e7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6103e4610781366004613813565b6115d4565b61038c611618565b6103e461079c366004613ae4565b611643565b6103ac611967565b61036f6107b7366004613b20565b73ffffffffffffffffffffffffffffffffffffffff91821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020908152604080832093909416825291909152205460ff1690565b6103ac61081f3660046136dd565b611990565b6103e46108323660046137d4565b61199b565b6103e4610845366004613b3e565b611a52565b600061085582611ae5565b92915050565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300805460609190819061088d90613b64565b80601f01602080910402602001604051908101604052809291908181526020018280546108b990613b64565b80156109065780601f106108db57610100808354040283529160200191610906565b820191906000526020600020905b8154815290600101906020018083116108e957829003601f168201915b505050505091505090565b600061091c82611af0565b5060008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079304602052604090205473ffffffffffffffffffffffffffffffffffffffff16610855565b610971828233611b6e565b5050565b604080516001808252818301909252606091602080830190803683370190505090506103e86bffffffffffffffffffffffff16816000815181106109bb576109bb613bb7565b602002602001018181525050919050565b60006109d6611b7b565b905090565b6103ea546000907501000000000000000000000000000000000000000000900464ffffffffff16428110610a29576103eb5473ffffffffffffffffffffffffffffffffffffffff1691509091565b5060009091565b73ffffffffffffffffffffffffffffffffffffffff8216610a85576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b6000610a92838333611b9e565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b20576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80861660048301526024820184905282166044820152606401610a7c565b50505050565b6000610855818361124d565b610b3a611bb3565b80600003610c2b576103ea547501000000000000000000000000000000000000000000900464ffffffffff16421115610b9f576040517f18e4522200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103eb80547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556103ea80547fffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffffff1690556040516000808252907f9267a4d3cfb4335b5ff6a42f4e7ffb5e14f490820b4b16ce4ac50a5aa0ea286c906020015b60405180910390a250565b610c3481421190565b15610c6b576040517f4bda5b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6303c267004201811115610cb3576040517f864d8247000000000000000000000000000000000000000000000000000000008152426303c26700016004820152602401610a7c565b6103ea547501000000000000000000000000000000000000000000900464ffffffffff164211158015610d0857506103ea547501000000000000000000000000000000000000000000900464ffffffffff1681115b15610d1557610d15611bbb565b6103eb8054337fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556103ea80547fffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000064ffffffffff8516021790556040518281527f9267a4d3cfb4335b5ff6a42f4e7ffb5e14f490820b4b16ce4ac50a5aa0ea286c90602001610c20565b50565b610dbe7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682610e0e565b600080610df784611990565b94600a90930493505050565b610dbe6000826115d4565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e4881611c0f565b610b208383611c19565b610dbe600082610e0e565b73ffffffffffffffffffffffffffffffffffffffff81163314610eac576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eb68282611d1c565b505050565b600061085561120b565b610eb68383836040518060200160405280600081525061138e565b61097160008233611b9e565b610ef4611dd5565b6103ea5474010000000000000000000000000000000000000000900460ff1615610f4a576040517faefa400d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103ea80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055610f948282611e16565b7f518159e6371cd5b4c2aadcb329217344ee78b366cd3730e987f31878702401b682826001604051610fc893929190613be6565b60405180910390a160408051600081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208201527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c910160405180910390a15050565b600061085582611af0565b60606109d6611e63565b60007f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930073ffffffffffffffffffffffffffffffffffffffff83166110b5576040517f89c62b6400000000000000000000000000000000000000000000000000000000815260006004820152602401610a7c565b73ffffffffffffffffffffffffffffffffffffffff9092166000908152600390920160205250604090205490565b6110eb611e6d565b6110f56000611ec5565b565b6103ea5474010000000000000000000000000000000000000000900460ff161561114d576040517faefa400d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611155611dd5565b61115f8282611e16565b7f518159e6371cd5b4c2aadcb329217344ee78b366cd3730e987f31878702401b682826000604051610fc893929190613be6565b338061119d611967565b73ffffffffffffffffffffffffffffffffffffffff1614611202576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610a7c565b610dbe81611ec5565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b5473ffffffffffffffffffffffffffffffffffffffff1692915050565b60008215801561128f575061126061120b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561129c57506001610855565b60008381527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b9392505050565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930180546060917f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793009161088d90613b64565b61134f611dd5565b6110f5611f15565b610971338383611fa5565b60006108557f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68361124d565b611399848484610a30565b610b20848484846120c6565b604080516001808252818301909252606091602080830190803683370190505090506113d082611990565b816000815181106113e3576113e3613bb7565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050919050565b6040805160018082528183019092526060918291906020808301908036833701905050915061145083611990565b8260008151811061146357611463613bb7565b73ffffffffffffffffffffffffffffffffffffffff929092166020928302919091018201526040805160018082528183019092529182810190803683370190505090506103e86bffffffffffffffffffffffff16816000815181106114ca576114ca613bb7565b602002602001018181525050915091565b60606114e682611af0565b506114ef611e63565b6114f8836122bd565b604051602001611509929190613c3f565b6040516020818303038152906040529050919050565b610dbe7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6826115d4565b6103e85460009063ffffffff6801000000000000000082048116916115749161ffff87169116613c96565b63ffffffff1611156115ca576103e8546040517fab4e7f1f0000000000000000000000000000000000000000000000000000000081526801000000000000000090910463ffffffff166004820152602401610a7c565b6112ef838361237b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461160e81611c0f565b610b208383611d1c565b60606109d67f000000000000000000000000000000000000000000000000000000000000000061243f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561168e5750825b905060008267ffffffffffffffff1660011480156116ab5750303b155b9050811580156116b9575080155b156116f0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156117515784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6117dd6117616020880188613cda565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117a3925050506040890189613cda565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061247e92505050565b6117f26117ed60208801886137d4565b6124c1565b61180a61180560c0880160a08901613b3e565b612519565b61181f61181a6060880188613cda565b611e16565b61184461182f60208801886137d4565b61183f60e0890160c08a016137d4565b61259d565b6118a0611858610100880160e089016137d4565b6103ea80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6118fe6118b360a0880160808901613d46565b6103ea805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b831561195f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00611230565b6000610855826125cb565b6119a3611e6d565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255611a0c61120b565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611a5a611dd5565b6103ea547501000000000000000000000000000000000000000000900464ffffffffff164211611adc576103ea546040517f2f234304000000000000000000000000000000000000000000000000000000008152750100000000000000000000000000000000000000000090910464ffffffffff166004820152602401610a7c565b610dbe816125f7565b60006108558261279c565b60008181527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079302602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610855576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101849052602401610a7c565b610eb683838360016127f2565b60006109d66103e85463ffffffff64010000000082048116918116919091031690565b6000611bab8484846129fe565b949350505050565b6110f5612a2e565b33611bc581611362565b158015611bd85750611bd681610b26565b155b15610dbe576040517f15301d4000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dbe8133612af8565b60007f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800611c46848461124d565b611d0b5760008481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ca73390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610855565b6000915050610855565b5092915050565b60007f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800611d49848461124d565b15611d0b5760008481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610855565b611de060003361124d565b6110f5576040517ff6899cee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e5582828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612b5792505050565b6103e9610eb6828483613da9565b60606109d6612b92565b33611e7661120b565b73ffffffffffffffffffffffffffffffffffffffff16146110f5576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610a7c565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815561097182612c25565b611f1d6109cc565b15611f5f57611f2a6109cc565b6040517f707fdc25000000000000000000000000000000000000000000000000000000008152600401610a7c91815260200190565b604051339081907fd3747e9bfbfe48316cef75f276e53ab68e800a3fa1a0d4540245a64b85c2598890600090a28073ffffffffffffffffffffffffffffffffffffffff16ff5b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930073ffffffffffffffffffffffffffffffffffffffff831661202b576040517f5b08ba1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610a7c565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260058401602090815260408083209488168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83163b15610b20576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063150b7a029061213b903390889087908790600401613ec3565b6020604051808303816000875af1925050508015612194575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261219191810190613f0c565b60015b612223573d8080156121c2576040519150601f19603f3d011682016040523d82523d6000602084013e6121c7565b606091505b50805160000361221b576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610a7c565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a0200000000000000000000000000000000000000000000000000000000146122b6576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610a7c565b5050505050565b606060006122ca83612cbb565b600101905060008167ffffffffffffffff8111156122ea576122ea6138fa565b6040519080825280601f01601f191660200182016040528015612314576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461231e57509392505050565b6000612385611bb3565b8261ffff166000036123c3576040517fce15a28400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506103e85463ffffffff90811660018101909116906123e79061ffff851690613c96565b6103e880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169182179055815b8181116124375761242f8482612d9d565b60010161241e565b505092915050565b6060600061244c83612db7565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b612486612df8565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300806124b28482613f29565b5060018101610b208382613f29565b6124c9612df8565b73ffffffffffffffffffffffffffffffffffffffff8116611202576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610a7c565b8063ffffffff16600003612559576040517ff685885500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8805463ffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff909216919091179055565b6125a682612e5f565b73ffffffffffffffffffffffffffffffffffffffff8116156109715761097181612e6a565b6103ea5473ffffffffffffffffffffffffffffffffffffffff16806125f25761085561120b565b919050565b8063ffffffff1660000361264f576103e8546040517f89a313660000000000000000000000000000000000000000000000000000000081526801000000000000000090910463ffffffff166004820152602401610a7c565b6103e85468010000000000000000900463ffffffff161580159061268c57506103e85463ffffffff68010000000000000000909104811690821610155b156126db576103e8546040517f07f4133a0000000000000000000000000000000000000000000000000000000081526801000000000000000090910463ffffffff166004820152602401610a7c565b6103e85463ffffffff8083169116111561272e576103e8546040517fbcf4db2700000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610a7c565b6103e880547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000063ffffffff8416908102919091179091556040517f5633fd1915094f39ec7d395ea541662e957f3fffdcaf492b661373bf00da98fd90600090a250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5bf6f7b8000000000000000000000000000000000000000000000000000000001480610855575061085582612e94565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793008180612834575073ffffffffffffffffffffffffffffffffffffffff831615155b156129a857600061284485611af0565b905073ffffffffffffffffffffffffffffffffffffffff84161580159061289757508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156128f5575073ffffffffffffffffffffffffffffffffffffffff80821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209388168352929052205460ff16155b15612944576040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610a7c565b82156129a657848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b600093845260040160205250506040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8416612a2357612a23611dd5565b611bab848484612fce565b6103ea547501000000000000000000000000000000000000000000900464ffffffffff164211612af0576103eb5473ffffffffffffffffffffffffffffffffffffffff1633146110f5576103eb546103ea546040517f5e02273e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301527501000000000000000000000000000000000000000000900464ffffffffff166024820152604401610a7c565b6110f5611bbb565b612b02828261124d565b610971576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610a7c565b8051600003610dbe576040517ff73c5b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606103e98054612ba290613b64565b80601f0160208091040260200160405190810160405280929190818152602001828054612bce90613b64565b8015612c1b5780601f10612bf057610100808354040283529160200191612c1b565b820191906000526020600020905b815481529060010190602001808311612bfe57829003601f168201915b5050505050905090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612d04577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612d30576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612d4e57662386f26fc10000830492506010015b6305f5e1008310612d66576305f5e100830492506008015b6127108310612d7a57612710830492506004015b60648310612d8c576064830492506002015b600a83106108555760010192915050565b610971828260405180602001604052806000815250613043565b600060ff8216601f811115610855576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166110f5576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610971600082611c19565b6109717f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682611c19565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a000000000000000000000000000000000000000000000000000000001480612f2757507fffffffff0000000000000000000000000000000000000000000000000000000082167f40c1a06400000000000000000000000000000000000000000000000000000000145b80612f7357507fffffffff0000000000000000000000000000000000000000000000000000000082167fbb3bafd600000000000000000000000000000000000000000000000000000000145b80612fbf57507fffffffff0000000000000000000000000000000000000000000000000000000082167fb779958400000000000000000000000000000000000000000000000000000000145b8061085557506108558261305a565b600073ffffffffffffffffffffffffffffffffffffffff841661303857612ff3611e6d565b6103e88054600163ffffffff64010000000080840482169290920116027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9091161790555b611bab8484846130fc565b61304d83836132c1565b610eb660008484846120c6565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806130ed57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610855575061085582613372565b60008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260408120547f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793009073ffffffffffffffffffffffffffffffffffffffff90811690841615613177576131778185876133c8565b73ffffffffffffffffffffffffffffffffffffffff8116156131ef576131a16000866000806127f2565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600383016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b73ffffffffffffffffffffffffffffffffffffffff86161561323a5773ffffffffffffffffffffffffffffffffffffffff861660009081526003830160205260409020805460010190555b600085815260028301602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216613311576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260006004820152602401610a7c565b600061331f83836000611b9e565b905073ffffffffffffffffffffffffffffffffffffffff811615610eb6576040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260006004820152602401610a7c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610855575061085582613478565b6133d383838361350f565b610eb65773ffffffffffffffffffffffffffffffffffffffff8316613427576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101829052602401610a7c565b6040517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101829052604401610a7c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4906490600000000000000000000000000000000000000000000000000000000148061085557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610855565b600073ffffffffffffffffffffffffffffffffffffffff831615801590611bab57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806135bc575073ffffffffffffffffffffffffffffffffffffffff80851660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209387168352929052205460ff165b80611bab57505060009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079304602052604090205473ffffffffffffffffffffffffffffffffffffffff908116911614919050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610dbe57600080fd5b60006020828403121561365157600080fd5b81356112ef81613611565b60005b8381101561367757818101518382015260200161365f565b50506000910152565b6000815180845261369881602086016020860161365c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006112ef6020830184613680565b6000602082840312156136ef57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610dbe57600080fd5b6000806040838503121561372b57600080fd5b8235613736816136f6565b946020939093013593505050565b60008151808452602080850194506020840160005b8381101561377557815187529582019590820190600101613759565b509495945050505050565b6020815260006112ef6020830184613744565b6000806000606084860312156137a857600080fd5b83356137b3816136f6565b925060208401356137c3816136f6565b929592945050506040919091013590565b6000602082840312156137e657600080fd5b81356112ef816136f6565b6000806040838503121561380457600080fd5b50508035926020909101359150565b6000806040838503121561382657600080fd5b823591506020830135613838816136f6565b809150509250929050565b6000806020838503121561385657600080fd5b823567ffffffffffffffff8082111561386e57600080fd5b818501915085601f83011261388257600080fd5b81358181111561389157600080fd5b8660208285010111156138a357600080fd5b60209290920196919550909350505050565b803580151581146125f257600080fd5b600080604083850312156138d857600080fd5b82356138e3816136f6565b91506138f1602084016138b5565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561393f57600080fd5b843561394a816136f6565b9350602085013561395a816136f6565b925060408501359150606085013567ffffffffffffffff8082111561397e57600080fd5b818701915087601f83011261399257600080fd5b8135818111156139a4576139a46138fa565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156139ea576139ea6138fa565b816040528281528a6020848701011115613a0357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008151808452602080850194506020840160005b8381101561377557815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101613a3c565b6020815260006112ef6020830184613a27565b604081526000613a946040830185613a27565b8281036020840152613aa68185613744565b95945050505050565b60008060408385031215613ac257600080fd5b823561ffff81168114613ad457600080fd5b91506020830135613838816136f6565b600060208284031215613af657600080fd5b813567ffffffffffffffff811115613b0d57600080fd5b820161010081850312156112ef57600080fd5b60008060408385031215613b3357600080fd5b8235613ad4816136f6565b600060208284031215613b5057600080fd5b813563ffffffff811681146112ef57600080fd5b600181811c90821680613b7857607f821691505b602082108103613bb1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6040815282604082015282846060830137600060608483010152600060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011683010190508215156020830152949350505050565b60008351613c5181846020880161365c565b835190830190613c6581836020880161365c565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000009101908152600501949350505050565b63ffffffff818116838216019080821115611d15577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613d0f57600080fd5b83018035915067ffffffffffffffff821115613d2a57600080fd5b602001915036819003821315613d3f57600080fd5b9250929050565b600060208284031215613d5857600080fd5b6112ef826138b5565b601f821115610eb6576000816000526020600020601f850160051c81016020861015613d8a5750805b601f850160051c820191505b8181101561195f57828155600101613d96565b67ffffffffffffffff831115613dc157613dc16138fa565b613dd583613dcf8354613b64565b83613d61565b6000601f841160018114613e275760008515613df15750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556122b6565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613e765786850135825560209485019460019092019101613e56565b5086821015613eb1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152613f026080830184613680565b9695505050505050565b600060208284031215613f1e57600080fd5b81516112ef81613611565b815167ffffffffffffffff811115613f4357613f436138fa565b613f5781613f518454613b64565b84613d61565b602080601f831160018114613faa5760008415613f745750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561195f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613ff757888601518255948401946001909101908401613fd8565b508582101561403357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212208e8654c91b641adf59be7ee46cab38f907d9d3d7344234e246644613c070fd5e64736f6c634300081900334e46542044726f7020436f6c6c656374696f6e20496d706c656d656e746174696f6e