[ { "inputs": [ { "internalType": "bool", "name": "disable", "type": "bool" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ArrayLengthMismatch", "type": "error" }, { "inputs": [], "name": "BatchSizeTooSmall", "type": "error" }, { "inputs": [], "name": "BurnZeroTokens", "type": "error" }, { "inputs": [], "name": "CallerNotApprovedOrOwner", "type": "error" }, { "inputs": [], "name": "CallerNotTokenOwner", "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": [], "name": "EmptyTokenURI", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "MaxRoyaltyError", "type": "error" }, { "inputs": [], "name": "MintToZeroAddresses", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "NotRoleOrOwner", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "NotSpecifiedRole", "type": "error" }, { "inputs": [], "name": "OperatorBlocked", "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": "StoryNotEnabled", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "StringsInsufficientHexLength", "type": "error" }, { "inputs": [], "name": "TokenDoesntExist", "type": "error" }, { "inputs": [], "name": "ZeroAddressError", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" } ], "name": "AllRolesRevoked", "type": "event" }, { "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": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "prevBlockListRegistry", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newBlockListRegistry", "type": "address" } ], "name": "BlockListRegistryUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "creatorAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "creatorName", "type": "string" }, { "indexed": false, "internalType": "string", "name": "story", "type": "string" } ], "name": "CollectionStory", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "creatorAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "creatorName", "type": "string" }, { "indexed": false, "internalType": "string", "name": "story", "type": "string" } ], "name": "CreatorStory", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newPercentage", "type": "uint256" } ], "name": "DefaultRoyaltyUpdate", "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": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "prevNftDelegationRegistry", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newNftDelegationRegistry", "type": "address" } ], "name": "NftDelegationRegistryUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "approved", "type": "bool" }, { "indexed": false, "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "RoleChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "collectorAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "collectorName", "type": "string" }, { "indexed": false, "internalType": "string", "name": "story", "type": "string" } ], "name": "Story", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "status", "type": "bool" } ], "name": "StoryStatusUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "newRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newPercentage", "type": "uint256" } ], "name": "TokenRoyaltyOverride", "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" }, { "inputs": [], "name": "ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "APPROVED_MINT_CONTRACT", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "BASIS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "", "type": "string" }, { "internalType": "string", "name": "story", "type": "string" } ], "name": "addCollectionStory", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "", "type": "string" }, { "internalType": "string", "name": "story", "type": "string" } ], "name": "addCreatorStory", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "", "type": "string" }, { "internalType": "string", "name": "story", "type": "string" } ], "name": "addStory", "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": "string[]", "name": "newUris", "type": "string[]" }, { "internalType": "address[][]", "name": "addresses", "type": "address[][]" }, { "internalType": "uint256[][]", "name": "amounts", "type": "uint256[][]" }, { "internalType": "address[]", "name": "royaltyAddresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "royaltyPercents", "type": "uint256[]" } ], "name": "batchCreateToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string[]", "name": "newUris", "type": "string[]" }, { "internalType": "address[][]", "name": "addresses", "type": "address[][]" }, { "internalType": "uint256[][]", "name": "amounts", "type": "uint256[][]" } ], "name": "batchCreateToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "blocklistRegistry", "outputs": [ { "internalType": "contract IBlockListRegistry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newUri", "type": "string" }, { "internalType": "address[]", "name": "addresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "address", "name": "royaltyAddress", "type": "address" }, { "internalType": "uint256", "name": "royaltyPercent", "type": "uint256" } ], "name": "createToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newUri", "type": "string" }, { "internalType": "address[]", "name": "addresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "createToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address[]", "name": "addresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "externalMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getDefaultRoyaltyRecipientAndPercentage", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMembers", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getTokenDetails", "outputs": [ { "components": [ { "internalType": "bool", "name": "created", "type": "bool" }, { "internalType": "string", "name": "uri", "type": "string" } ], "internalType": "struct IERC1155TL.Token", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "potentialRoleMember", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "string", "name": "personalization", "type": "string" }, { "internalType": "address", "name": "defaultRoyaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "defaultRoyaltyPercentage", "type": "uint256" }, { "internalType": "address", "name": "initOwner", "type": "address" }, { "internalType": "address[]", "name": "admins", "type": "address[]" }, { "internalType": "bool", "name": "enableStory", "type": "bool" }, { "internalType": "address", "name": "initBlockListRegistry", "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address[]", "name": "addresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "mintToken", "outputs": [], "stateMutability": "nonpayable", "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": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "revokeAllRoles", "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": "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": [ { "internalType": "address[]", "name": "minters", "type": "address[]" }, { "internalType": "bool", "name": "status", "type": "bool" } ], "name": "setApprovedMintContracts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newBlockListRegistry", "type": "address" } ], "name": "setBlockListRegistry", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newRecipient", "type": "address" }, { "internalType": "uint256", "name": "newPercentage", "type": "uint256" } ], "name": "setDefaultRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "setNftDelegationRegistry", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address[]", "name": "roleMembers", "type": "address[]" }, { "internalType": "bool", "name": "status", "type": "bool" } ], "name": "setRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "status", "type": "bool" } ], "name": "setStoryStatus", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "newRecipient", "type": "address" }, { "internalType": "uint256", "name": "newPercentage", "type": "uint256" } ], "name": "setTokenRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "newUri", "type": "string" } ], "name": "setTokenUri", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "storyEnabled", "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": "tlNftDelegationRegistry", "outputs": [ { "internalType": "contract ITLNftDelegationRegistry", "name": "", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b506040516200573c3803806200573c833981016040819052620000349162000100565b80156200004557620000456200004c565b506200012b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156200009d5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000fd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156200011357600080fd5b815180151581146200012457600080fd5b9392505050565b615601806200013b6000396000f3fe608060405234801561001057600080fd5b50600436106103145760003560e01c806357f7789e116101a75780639c22fcbb116100ee578063d8c3a27411610097578063f242432a11610071578063f242432a146107d9578063f2fde38b146107ec578063ffa1ad74146107ff57600080fd5b8063d8c3a27414610758578063d8d045b41461076b578063e985e9c51461077e57600080fd5b8063bbe4e87b116100c8578063bbe4e87b1461071e578063c1e0372814610725578063d4bf502a1461074557600080fd5b80639c22fcbb146106dd578063a22cb465146106eb578063a3246ad3146106fe57600080fd5b80637e6cc5421161015057806391d148541161012a57806391d148541461063f57806395d89b41146106c25780639713c807146106ca57600080fd5b80637e6cc542146105a75780638bb9c5bf146105fc5780638da5cb5b1461060f57600080fd5b8063715018a611610181578063715018a61461056557806375b238fc1461056d5780637c5d28bd1461059457600080fd5b806357f7789e1461052c5780635b23e3ce1461053f578063665794021461055257600080fd5b80632d28c08b1161026b578063485d3c071161021457806351dc02f2116101ee57806351dc02f2146104fd578063528cfa981461051057806356000f771461051957600080fd5b8063485d3c07146104bd5780634a597065146104d05780634e1273f4146104dd57600080fd5b806333aa4fb31161024557806333aa4fb31461048f5780633db0f8ab1461049757806346317db7146104aa57600080fd5b80632d28c08b146104565780632eb2c2d614610469578063319210231461047c57600080fd5b806318160ddd116102cd578063249fde3b116102a7578063249fde3b146103fe57806329471dc2146104115780632a55205a1461042457600080fd5b806318160ddd146103ba5780631a006e8a146103c25780631ff7f0bc146103d757600080fd5b806306fdde03116102fe57806306fdde03146103625780630e89341c146103775780631145a2431461038a57600080fd5b8062fdd58e1461031957806301ffc9a71461033f575b600080fd5b61032c610327366004614378565b61083b565b6040519081526020015b60405180910390f35b61035261034d3660046143d0565b610884565b6040519015158152602001610336565b61036a6109d3565b6040516103369190614433565b61036a610385366004614446565b610a61565b6003546103a29061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610336565b60005461032c565b6103d56103d036600461445f565b610b4d565b005b61032c7ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af581565b6103d561040c3660046144bf565b610cb6565b6103d561041f36600461457b565b610dbb565b6104376104323660046145e7565b610ef6565b604080516001600160a01b039093168352602083019190915201610336565b6103d5610464366004614609565b610fd1565b6103d5610477366004614820565b61117d565b6103d561048a3660046148ca565b611233565b6103d561153a565b6103d56104a53660046149bb565b6115a4565b6103d56104b83660046149f9565b6116e7565b6103d56104cb366004614a93565b61193e565b6003546103529060ff1681565b6104f06104eb366004614b36565b611acf565b6040516103369190614bd6565b6103d561050b366004614c02565b611bb5565b61032c61271081565b6103d5610527366004614c59565b611d0a565b6103d561053a366004614cc2565b611e8f565b6103d561054d366004614c59565b61205f565b6103d5610560366004614d0e565b61212a565b6103d561243c565b61032c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6103d56105a2366004614e08565b612450565b6104377fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee70700547fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee70701546001600160a01b0390911691565b6103d561060a366004614446565b61259e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166103a2565b61035261064d366004614e25565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083209483529381528382206001600160a01b0393909316825291909152205460ff1690565b61036a612604565b6103d56106d8366004614e51565b612611565b6103d561031436600461445f565b6103d56106f9366004614e86565b61270c565b61071161070c366004614446565b61275c565b6040516103369190614ebd565b60006103a2565b610738610733366004614446565b6127cb565b6040516103369190614f0a565b6103d5610753366004614f31565b6128a0565b6103d56107663660046144bf565b6128b8565b6103d5610779366004614378565b61297a565b61035261078c366004614f81565b6001600160a01b0391821660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b6103d56107e7366004614fab565b612a74565b6103d56107fa36600461445f565b612b2a565b61036a6040518060400160405280600581526020017f332e312e3000000000000000000000000000000000000000000000000000000081525081565b60008181527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602090815260408083206001600160a01b03861684529091529020545b92915050565b600061088f82612b81565b8061089e575061089e82612c64565b806108ea57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1c8e024d00000000000000000000000000000000000000000000000000000000145b8061093657507fffffffff0000000000000000000000000000000000000000000000000000000082167f2464f17b00000000000000000000000000000000000000000000000000000000145b8061098257507f0d23ecb9000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061087e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f452d5a4a000000000000000000000000000000000000000000000000000000001492915050565b600180546109e090615010565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c90615010565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b505050505081565b60008181526004602052604090205460609060ff16610aac576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526004602052604090206001018054610ac890615010565b80601f0160208091040260200160405190810160405280929190818152602001828054610af490615010565b8015610b415780601f10610b1657610100808354040283529160200191610b41565b820191906000526020600020905b815481529060010190602001808311610b2457829003601f168201915b50505050509050919050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015610c1c575033610c107f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15610c42576040516376c1743160e01b8152600481018290526024015b60405180910390fd5b600380546001600160a01b038481166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff851617909455604051939092041691829033907f6d65d584292e445b64ea5cb6c8d589521aa512572ea6b91ea96e93846ae20aa590600090a4505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015610d85575033610d797f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15610da6576040516376c1743160e01b815260048101829052602401610c39565b610db38686868686612cfb565b505050505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015610e8a575033610e7e7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15610eab576040516376c1743160e01b815260048101829052602401610c39565b337f2e88f428bf841b9abdc4c8d098cebae9a254b846c942a7fe0abf4963cf91ed96610ed682612e23565b8585604051610ee79392919061508e565b60405180910390a25050505050565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee7070080547fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee707015460008581527fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee7070260205260408120549093849390926001600160a01b039182169290911615610faa5750506000858152600282016020526040902080546001909101546001600160a01b03909116905b81612710610fb883896150ed565b610fc29190615104565b945094505050505b9250929050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156110a05750336110947f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b156110c1576040516376c1743160e01b815260048101829052602401610c39565b60006111648a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c91829185019084908082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b918291850190849080828437600092019190915250612e3992505050565b9050611171818585612fd6565b50505050505050505050565b336001600160a01b03861681148015906111dc57506001600160a01b0380871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b15611226576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b03808316600483015287166024820152604401610c39565b610db38686868686613103565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156113025750336112f67f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15611323576040516376c1743160e01b815260048101829052602401610c39565b60008a900361135e576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898814158061136d5750878614155b806113785750858414155b806113835750838214155b156113ba576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8a81101561152c5760006114d88d8d848181106113dc576113dc61513f565b90506020028101906113ee919061516e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92508e91508690508181106114375761143761513f565b905060200281019061144991906151d3565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d915087905081811061148f5761148f61513f565b90506020028101906114a191906151d3565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612e3992505050565b9050611523818888858181106114f0576114f061513f565b9050602002016020810190611505919061445f565b8787868181106115175761151761513f565b90506020020135612fd6565b506001016113bd565b505050505050505050505050565b611542613196565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e30080548160006115718361523b565b909155505060405133907fdf1eaea754aea6dc7d083377ed7366dd7405e3fb0f16ddfb9448770520e4427990600090a250565b60008390036115df576040517f3fb001d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b0386161480159061163b57506001600160a01b03851660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832033845290915290205460ff16155b15611672576040517fc9c1cf1b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e0858585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080890282810182019093528882529093508892508791829185019084908082843760009201919091525061320a92505050565b5050505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156117b65750336117aa7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b156117d7576040516376c1743160e01b815260048101829052602401610c39565b6000869003611812576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85841415806118215750838214155b15611858576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b868110156119345761192b8888838181106118785761187861513f565b905060200281019061188a919061516e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508991508590508181106118d3576118d361513f565b90506020028101906118e591906151d3565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925088915086905081811061148f5761148f61513f565b5060010161185b565b5050505050505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015611a0d575033611a017f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15611a2e576040516376c1743160e01b815260048101829052602401610c39565b61193487878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525050604080516020808a02828101820190935289825290935089925088918291850190849080828437600092019190915250612e3992505050565b60608151835114611b1957815183516040517f5b05999100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610c39565b6000835167ffffffffffffffff811115611b3557611b356146bd565b604051908082528060200260200182016040528015611b5e578160200160208202803683370190505b50905060005b8451811015611bad57602080820286010151611b889060208084028701015161083b565b828281518110611b9a57611b9a61513f565b6020908102919091010152600101611b64565b509392505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015611c84575033611c787f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15611ca5576040516376c1743160e01b815260048101829052602401610c39565b611d047ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af585858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525087925061326a915050565b50505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015611dd9575033611dcd7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15611dfa576040516376c1743160e01b815260048101829052602401610c39565b60008681526004602052604090205460ff16611e42576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33867f5c0564b4237730adb947143019acb5addfdbf1be3ad1edf72e24a8f9d02fd2c1611e6e83612e23565b8686604051611e7f9392919061508e565b60405180910390a3505050505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015611f5e575033611f527f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15611f7f576040516376c1743160e01b815260048101829052602401610c39565b60008481526004602052604090205460ff16611fc7576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000829003612002576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260046020526040902060010161201e83858361529d565b50837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b848460405161205192919061535d565b60405180910390a250505050565b60035460ff1661209b576040517fc3d4cd7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120a5338661083b565b6000036120de576040517fb23b68b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33857f40ebea9c3c7603a5d233a0bec01e483338737b6bed01bed2ac09ccbaa3d4b7ac61210a83612e23565b858560405161211b9392919061508e565b60405180910390a35050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156121755750825b905060008267ffffffffffffffff1660011480156121925750303b155b9050811580156121a0575080155b156121d7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156122385784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6122506040518060200160405280600081525061340f565b61225a8b8b613420565b61226389613432565b61228f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177589600161326a565b600161229b8f82615371565b5060026122a88e82615371565b50600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168815159081179091556040516001600160a01b038b16907f558a671a281f60a95ebbb675ce350bcef6b95e9c06674b651786076773f6ae1990600090a3600380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03898116918202929092179092556040516000918c16907f6d65d584292e445b64ea5cb6c8d589521aa512572ea6b91ea96e93846ae20aa5908390a48b51156123cb576001600160a01b0389167f2e88f428bf841b9abdc4c8d098cebae9a254b846c942a7fe0abf4963cf91ed966123b382612e23565b8e6040516123c2929190615431565b60405180910390a25b831561242c5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050505050565b612444613196565b61244e600061344b565b565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff1615801561251f5750336125137f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15612540576040516376c1743160e01b815260048101829052602401610c39565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001683151590811790915560405133907f558a671a281f60a95ebbb675ce350bcef6b95e9c06674b651786076773f6ae1990600090a35050565b6040805160018082528183019092526000916020808301908036833701905050905033816000815181106125d4576125d461513f565b60200260200101906001600160a01b031690816001600160a01b0316815250506126008282600061326a565b5050565b600280546109e090615010565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156126e05750336126d47f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15612701576040516376c1743160e01b815260048101829052602401610c39565b611d04848484612fd6565b80156127525761271b826134d4565b15612752576040517f30aaa1db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126008282613586565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e300805460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e302602090815260408083208584529091529020606091906127c490613591565b9392505050565b6040805180820190915260008152606060208201526000828152600460209081526040918290208251808401909352805460ff1615158352600181018054919284019161281790615010565b80601f016020809104026020016040519081016040528092919081815260200182805461284390615010565b80156128905780601f1061286557610100808354040283529160200191612890565b820191906000526020600020905b81548152906001019060200180831161287357829003601f168201915b5050505050815250509050919050565b6128a8613196565b6128b383838361326a565b505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af58085529083528184203385529092529091205460ff16610da6576040517fee074e7400000000000000000000000000000000000000000000000000000000815260048101829052602401610c39565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015612a49575033612a3d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15612a6a576040516376c1743160e01b815260048101829052602401610c39565b6128b3838361359e565b336001600160a01b0386168114801590612ad357506001600160a01b0380871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b15612b1d576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b03808316600483015287166024820152604401610c39565b610db386868686866136b5565b612b32613196565b6001600160a01b038116612b75576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610c39565b612b7e8161344b565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a26000000000000000000000000000000000000000000000000000000001480612c1457507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061087e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461087e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a00000000000000000000000000000000000000000000000000000000148061087e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461087e565b60008581526004602052604090205460ff16612d43576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000839003612d7e576040517fd8b8bfb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828114612db7576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b83811015610db357612e1b858583818110612dd757612dd761513f565b9050602002016020810190612dec919061445f565b87858585818110612dff57612dff61513f565b9050602002013560405180602001604052806000815250613776565b600101612dba565b606061087e6001600160a01b03831660146137ec565b60008351600003612e76576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8251600003612eb1576040517fd8b8bfb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151835114612eec576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080549080612efb8361523b565b9091555050604080518082018252600180825260208083018881526000805481526004909252939020825181547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016901515178155925191929190820190612f639082615371565b5090505060005b8351811015612fca57612fc2848281518110612f8857612f8861513f565b6020026020010151600054858481518110612fa557612fa561513f565b602002602001015160405180602001604052806000815250613776565b600101612f6a565b50506000549392505050565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee707006001600160a01b038316613037576040517f3efa09af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612710821115613073576040517fdc65bdeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260028201602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038716908117825560019091018590558251908152908101849052859133917f3001fd4350a0a56b8c380c23b85aebc6fb22b32c98a314ba3aecc0bc23a1cf9091015b60405180910390a350505050565b6001600160a01b038416613146576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610c39565b6001600160a01b038516613189576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610c39565b6116e08585858585613a12565b336131c87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461244e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c39565b6001600160a01b03831661324d576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610c39565b6128b3836000848460405180602001604052806000815250613a12565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e30060005b83518110156116e057815460009081526001830160209081526040808320888452909152812085518592908790859081106132cb576132cb61513f565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508215613359576133538482815181106133255761332561513f565b6020908102919091018101518454600090815260028601835260408082208a83529093529190912090613a65565b5061339e565b61339c84828151811061336e5761336e61513f565b6020908102919091018101518454600090815260028601835260408082208a83529093529190912090613a7a565b505b8215158482815181106133b3576133b361513f565b60200260200101516001600160a01b0316336001600160a01b03167fc9f6f69b3c19bd2b7eb8273129bbca5e3db0e3be63ca9903e140122a5bbb556e886040516133ff91815260200190565b60405180910390a460010161328e565b613417613a8f565b612b7e81613af6565b613428613a8f565b6126008282613b07565b61343a613a8f565b61344381613b19565b612b7e613b2a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60035460009061010090046001600160a01b03166134f457506000919050565b6003546040517f334980a50000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526101009092049091169063334980a590602401602060405180830381865afa15801561355d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087e919061545f565b919050565b612600338383613b32565b606060006127c483613c1b565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee707006001600160a01b0383166135ff576040517f3efa09af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271082111561363b576040517fdc65bdeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117825560018201839055604080519182526020820184905233917f37dd87932a16caf40cd3c1ba643a0336807c74041d8c93260524aca37878f010910160405180910390a2505050565b6001600160a01b0384166136f8576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610c39565b6001600160a01b03851661373b576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610c39565b6040805160018082526020820186905281830190815260608201859052608082019092529061376d8787848487613a12565b50505050505050565b6001600160a01b0384166137b9576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610c39565b60408051600180825260208201869052818301908152606082018590526080820190925290610db3600087848487613a12565b60608260006137fc8460026150ed565b61380790600261547c565b67ffffffffffffffff81111561381f5761381f6146bd565b6040519080825280601f01601f191660200182016040528015613849576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106138805761388061513f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106138e3576138e361513f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600061391f8560026150ed565b61392a90600161547c565b90505b60018111156139c7577f303132333435363738396162636465660000000000000000000000000000000083600f166010811061396b5761396b61513f565b1a60f81b8282815181106139815761398161513f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049290921c916139c08161548f565b905061392d565b508115613a0a576040517fe22e27eb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610c39565b949350505050565b613a1e85858585613c76565b6001600160a01b038416156116e05782513390600103613a575760208481015190840151613a50838989858589613edf565b5050610db3565b610db381878787878761407f565b60006127c4836001600160a01b0384166141cb565b60006127c4836001600160a01b03841661421a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661244e576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613afe613a8f565b612b7e8161430d565b613b0f613a8f565b612600828261359e565b613b21613a8f565b612b7e81614359565b61244e613a8f565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006001600160a01b038316613b96576040517fced3e10000000000000000000000000000000000000000000000000000000000815260006004820152602401610c39565b6001600160a01b03848116600081815260018401602090815260408083209488168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191016130f5565b606081600001805480602002602001604051908101604052809291908181526020018280548015610b4157602002820191906000526020600020905b815481526020019060010190808311613c575750505050509050919050565b805182517f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45009114613ce057825182516040517f5b05999100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610c39565b3360005b8451811015613dff576020818102868101820151908601909101516001600160a01b03891615613db0576000828152602086815260408083206001600160a01b038d16845290915290205481811015613d89576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038b166004820152602481018290526044810183905260648101849052608401610c39565b6000838152602087815260408083206001600160a01b038e16845290915290209082900390555b6001600160a01b03881615613df5576000828152602086815260408083206001600160a01b038c16845290915281208054839290613def90849061547c565b90915550505b5050600101613ce4565b508351600103613e805760208401516000906020850151909150866001600160a01b0316886001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051613e71929190918252602082015260400190565b60405180910390a45050610db3565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051613ecf9291906154a6565b60405180910390a4505050505050565b6001600160a01b0384163b15610db3576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e6190613f3c90899089908890889088906004016154cb565b6020604051808303816000875af1925050508015613f77575060408051601f3d908101601f19168201909252613f749181019061550e565b60015b613ff9573d808015613fa5576040519150601f19603f3d011682016040523d82523d6000602084013e613faa565b606091505b508051600003613ff1576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610c39565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461376d576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610c39565b6001600160a01b0384163b15610db3576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c81906140dc908990899088908890889060040161552b565b6020604051808303816000875af1925050508015614117575060408051601f3d908101601f191682019092526141149181019061550e565b60015b614145573d808015613fa5576040519150601f19603f3d011682016040523d82523d6000602084013e613faa565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c81000000000000000000000000000000000000000000000000000000001461376d576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610c39565b60008181526001830160205260408120546142125750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561087e565b50600061087e565b6000818152600183016020526040812054801561430357600061423e600183615589565b855490915060009061425290600190615589565b90508082146142b75760008660000182815481106142725761427261513f565b90600052602060002001549050808760000184815481106142955761429561513f565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806142c8576142c861559c565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061087e565b600091505061087e565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45007f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45026128b38382615371565b612b32613a8f565b80356001600160a01b038116811461358157600080fd5b6000806040838503121561438b57600080fd5b61439483614361565b946020939093013593505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114612b7e57600080fd5b6000602082840312156143e257600080fd5b81356127c4816143a2565b6000815180845260005b81811015614413576020818501810151868301820152016143f7565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006127c460208301846143ed565b60006020828403121561445857600080fd5b5035919050565b60006020828403121561447157600080fd5b6127c482614361565b60008083601f84011261448c57600080fd5b50813567ffffffffffffffff8111156144a457600080fd5b6020830191508360208260051b8501011115610fca57600080fd5b6000806000806000606086880312156144d757600080fd5b85359450602086013567ffffffffffffffff808211156144f657600080fd5b61450289838a0161447a565b9096509450604088013591508082111561451b57600080fd5b506145288882890161447a565b969995985093965092949392505050565b60008083601f84011261454b57600080fd5b50813567ffffffffffffffff81111561456357600080fd5b602083019150836020828501011115610fca57600080fd5b6000806000806040858703121561459157600080fd5b843567ffffffffffffffff808211156145a957600080fd5b6145b588838901614539565b909650945060208701359150808211156145ce57600080fd5b506145db87828801614539565b95989497509550505050565b600080604083850312156145fa57600080fd5b50508035926020909101359150565b60008060008060008060008060a0898b03121561462557600080fd5b883567ffffffffffffffff8082111561463d57600080fd5b6146498c838d01614539565b909a50985060208b013591508082111561466257600080fd5b61466e8c838d0161447a565b909850965060408b013591508082111561468757600080fd5b506146948b828c0161447a565b90955093506146a7905060608a01614361565b9150608089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614715576147156146bd565b604052919050565b600067ffffffffffffffff821115614737576147376146bd565b5060051b60200190565b600082601f83011261475257600080fd5b813560206147676147628361471d565b6146ec565b8083825260208201915060208460051b87010193508684111561478957600080fd5b602086015b848110156147a5578035835291830191830161478e565b509695505050505050565b600082601f8301126147c157600080fd5b813567ffffffffffffffff8111156147db576147db6146bd565b6147ee6020601f19601f840116016146ec565b81815284602083860101111561480357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561483857600080fd5b61484186614361565b945061484f60208701614361565b9350604086013567ffffffffffffffff8082111561486c57600080fd5b61487889838a01614741565b9450606088013591508082111561488e57600080fd5b61489a89838a01614741565b935060808801359150808211156148b057600080fd5b506148bd888289016147b0565b9150509295509295909350565b60008060008060008060008060008060a08b8d0312156148e957600080fd5b8a3567ffffffffffffffff8082111561490157600080fd5b61490d8e838f0161447a565b909c509a5060208d013591508082111561492657600080fd5b6149328e838f0161447a565b909a50985060408d013591508082111561494b57600080fd5b6149578e838f0161447a565b909850965060608d013591508082111561497057600080fd5b61497c8e838f0161447a565b909650945060808d013591508082111561499557600080fd5b506149a28d828e0161447a565b915080935050809150509295989b9194979a5092959850565b6000806000806000606086880312156149d357600080fd5b6149dc86614361565b9450602086013567ffffffffffffffff808211156144f657600080fd5b60008060008060008060608789031215614a1257600080fd5b863567ffffffffffffffff80821115614a2a57600080fd5b614a368a838b0161447a565b90985096506020890135915080821115614a4f57600080fd5b614a5b8a838b0161447a565b90965094506040890135915080821115614a7457600080fd5b50614a8189828a0161447a565b979a9699509497509295939492505050565b60008060008060008060608789031215614aac57600080fd5b863567ffffffffffffffff80821115614ac457600080fd5b614a368a838b01614539565b600082601f830112614ae157600080fd5b81356020614af16147628361471d565b8083825260208201915060208460051b870101935086841115614b1357600080fd5b602086015b848110156147a557614b2981614361565b8352918301918301614b18565b60008060408385031215614b4957600080fd5b823567ffffffffffffffff80821115614b6157600080fd5b614b6d86838701614ad0565b93506020850135915080821115614b8357600080fd5b50614b9085828601614741565b9150509250929050565b60008151808452602080850194506020840160005b83811015614bcb57815187529582019590820190600101614baf565b509495945050505050565b6020815260006127c46020830184614b9a565b8015158114612b7e57600080fd5b803561358181614be9565b600080600060408486031215614c1757600080fd5b833567ffffffffffffffff811115614c2e57600080fd5b614c3a8682870161447a565b9094509250506020840135614c4e81614be9565b809150509250925092565b600080600080600060608688031215614c7157600080fd5b85359450602086013567ffffffffffffffff80821115614c9057600080fd5b614c9c89838a01614539565b90965094506040880135915080821115614cb557600080fd5b5061452888828901614539565b600080600060408486031215614cd757600080fd5b83359250602084013567ffffffffffffffff811115614cf557600080fd5b614d0186828701614539565b9497909650939450505050565b60008060008060008060008060006101208a8c031215614d2d57600080fd5b893567ffffffffffffffff80821115614d4557600080fd5b614d518d838e016147b0565b9a5060208c0135915080821115614d6757600080fd5b614d738d838e016147b0565b995060408c0135915080821115614d8957600080fd5b614d958d838e016147b0565b9850614da360608d01614361565b975060808c01359650614db860a08d01614361565b955060c08c0135915080821115614dce57600080fd5b50614ddb8c828d01614ad0565b935050614dea60e08b01614bf7565b9150614df96101008b01614361565b90509295985092959850929598565b600060208284031215614e1a57600080fd5b81356127c481614be9565b60008060408385031215614e3857600080fd5b82359150614e4860208401614361565b90509250929050565b600080600060608486031215614e6657600080fd5b83359250614e7660208501614361565b9150604084013590509250925092565b60008060408385031215614e9957600080fd5b614ea283614361565b91506020830135614eb281614be9565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015614efe5783516001600160a01b031683529284019291840191600101614ed9565b50909695505050505050565b6020815281511515602082015260006020830151604080840152613a0a60608401826143ed565b600080600060608486031215614f4657600080fd5b83359250602084013567ffffffffffffffff811115614f6457600080fd5b614f7086828701614ad0565b9250506040840135614c4e81614be9565b60008060408385031215614f9457600080fd5b614f9d83614361565b9150614e4860208401614361565b600080600080600060a08688031215614fc357600080fd5b614fcc86614361565b9450614fda60208701614361565b93506040860135925060608601359150608086013567ffffffffffffffff81111561500457600080fd5b6148bd888289016147b0565b600181811c9082168061502457607f821691505b60208210810361505d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6040815260006150a160408301866143ed565b82810360208401526150b4818587615063565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761087e5761087e6150be565b60008261513a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126151a357600080fd5b83018035915067ffffffffffffffff8211156151be57600080fd5b602001915036819003821315610fca57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261520857600080fd5b83018035915067ffffffffffffffff82111561522357600080fd5b6020019150600581901b3603821315610fca57600080fd5b6000600019820361524e5761524e6150be565b5060010190565b601f8211156128b3576000816000526020600020601f850160051c8101602086101561527e5750805b601f850160051c820191505b81811015610db35782815560010161528a565b67ffffffffffffffff8311156152b5576152b56146bd565b6152c9836152c38354615010565b83615255565b6000601f8411600181146152fd57600085156152e55750838201355b600019600387901b1c1916600186901b1783556116e0565b600083815260209020601f19861690835b8281101561532e578685013582556020948501946001909201910161530e565b508682101561534b5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b602081526000613a0a602083018486615063565b815167ffffffffffffffff81111561538b5761538b6146bd565b61539f816153998454615010565b84615255565b602080601f8311600181146153d457600084156153bc5750858301515b600019600386901b1c1916600185901b178555610db3565b600085815260208120601f198616915b82811015615403578886015182559484019460019091019084016153e4565b50858210156154215787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600061544460408301856143ed565b828103602084015261545681856143ed565b95945050505050565b60006020828403121561547157600080fd5b81516127c481614be9565b8082018082111561087e5761087e6150be565b60008161549e5761549e6150be565b506000190190565b6040815260006154b96040830185614b9a565b82810360208401526154568185614b9a565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261550360a08301846143ed565b979650505050505050565b60006020828403121561552057600080fd5b81516127c4816143a2565b60006001600160a01b03808816835280871660208401525060a0604083015261555760a0830186614b9a565b82810360608401526155698186614b9a565b9050828103608084015261557d81856143ed565b98975050505050505050565b8181038181111561087e5761087e6150be565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122028f7a715d3a638c5ab6007ae3719f2d959bc2cf86d50c8fffe01184aad8047ef64736f6c634300081600330000000000000000000000000000000000000000000000000000000000000001