[ { "inputs": [ { "internalType": "address", "name": "_nativeTokenWrapper", "type": "address" }, { "internalType": "address", "name": "_trustedForwarder", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "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": false, "internalType": "string", "name": "prevURI", "type": "string" }, { "indexed": false, "internalType": "string", "name": "newURI", "type": "string" } ], "name": "ContractURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newRoyaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newRoyaltyBps", "type": "uint256" } ], "name": "DefaultRoyalty", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "prevOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnerUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "packId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalPacksCreated", "type": "uint256" } ], "name": "PackCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "packId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "opener", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "numOfPacksOpened", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "assetContract", "type": "address" }, { "internalType": "enum ITokenBundle.TokenType", "name": "tokenType", "type": "uint8" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "indexed": false, "internalType": "struct ITokenBundle.Token[]", "name": "rewardUnitsDistributed", "type": "tuple[]" } ], "name": "PackOpened", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "packId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalPacksCreated", "type": "uint256" } ], "name": "PackUpdated", "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": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "royaltyBps", "type": "uint256" } ], "name": "RoyaltyForToken", "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": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_packId", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "assetContract", "type": "address" }, { "internalType": "enum ITokenBundle.TokenType", "name": "tokenType", "type": "uint8" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "internalType": "struct ITokenBundle.Token[]", "name": "_contents", "type": "tuple[]" }, { "internalType": "uint256[]", "name": "_numOfRewardUnits", "type": "uint256[]" }, { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "addPackContents", "outputs": [ { "internalType": "uint256", "name": "packTotalSupply", "type": "uint256" }, { "internalType": "uint256", "name": "newSupplyAdded", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "canUpdatePack", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractType", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractVersion", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "assetContract", "type": "address" }, { "internalType": "enum ITokenBundle.TokenType", "name": "tokenType", "type": "uint8" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "internalType": "struct ITokenBundle.Token[]", "name": "_contents", "type": "tuple[]" }, { "internalType": "uint256[]", "name": "_numOfRewardUnits", "type": "uint256[]" }, { "internalType": "string", "name": "_packUri", "type": "string" }, { "internalType": "uint128", "name": "_openStartTimestamp", "type": "uint128" }, { "internalType": "uint128", "name": "_amountDistributedPerOpen", "type": "uint128" }, { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "createPack", "outputs": [ { "internalType": "uint256", "name": "packId", "type": "uint256" }, { "internalType": "uint256", "name": "packTotalSupply", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "getDefaultRoyaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_packId", "type": "uint256" } ], "name": "getPackContents", "outputs": [ { "components": [ { "internalType": "address", "name": "assetContract", "type": "address" }, { "internalType": "enum ITokenBundle.TokenType", "name": "tokenType", "type": "uint8" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "internalType": "struct ITokenBundle.Token[]", "name": "contents", "type": "tuple[]" }, { "internalType": "uint256[]", "name": "perUnitAmounts", "type": "uint256[]" } ], "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": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "member", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "count", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getRoyaltyInfoForToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_bundleId", "type": "uint256" } ], "name": "getTokenCountOfBundle", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_bundleId", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getTokenOfBundle", "outputs": [ { "components": [ { "internalType": "address", "name": "assetContract", "type": "address" }, { "internalType": "enum ITokenBundle.TokenType", "name": "tokenType", "type": "uint8" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "internalType": "struct ITokenBundle.Token", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_bundleId", "type": "uint256" } ], "name": "getUriOfBundle", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "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": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRoleWithSwitch", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_defaultAdmin", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "string", "name": "_contractURI", "type": "string" }, { "internalType": "address[]", "name": "_trustedForwarders", "type": "address[]" }, { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "_royaltyBps", "type": "uint256" } ], "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": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenIdToMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC1155BatchReceived", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC1155Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC721Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_packId", "type": "uint256" }, { "internalType": "uint256", "name": "_amountToOpen", "type": "uint256" } ], "name": "openPack", "outputs": [ { "components": [ { "internalType": "address", "name": "assetContract", "type": "address" }, { "internalType": "enum ITokenBundle.TokenType", "name": "tokenType", "type": "uint8" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "internalType": "struct ITokenBundle.Token[]", "name": "", "type": "tuple[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "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": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "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": "amount", "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": "string", "name": "_uri", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "_royaltyBps", "type": "uint256" } ], "name": "setDefaultRoyaltyInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newOwner", "type": "address" } ], "name": "setOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_bps", "type": "uint256" } ], "name": "setRoyaltyInfoForToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60c06040523480156200001157600080fd5b50604051620061c5380380620061c5833981016040819052620000349162000166565b6001600160a01b038216608052600054610100900460ff166200005e5760005460ff161562000068565b620000686200011c565b620000d05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b600054610100900460ff16158015620000f3576000805461ffff19166101011790555b6001600160a01b03821660a052801562000113576000805461ff00191690555b5050506200019e565b600062000134306200013a60201b6200218f1760201c565b15905090565b6001600160a01b03163b151590565b80516001600160a01b03811681146200016157600080fd5b919050565b600080604083850312156200017a57600080fd5b620001858362000149565b9150620001956020840162000149565b90509250929050565b60805160a051615ffa620001cb600039600061157a0152600081816102f001526143cb0152615ffa6000f3fe6080604052600436106102e05760003560e01c8063914e126a1161017f578063b0381b08116100e1578063d0d2fe251161008a578063e985e9c511610064578063e985e9c5146109fd578063f23a6e6114610a47578063f242432a14610a7357600080fd5b8063d0d2fe251461099b578063d547741f146109c8578063e8a3d485146109e857600080fd5b8063bd85b039116100bb578063bd85b03914610933578063ca15c87314610961578063cb2ef6f71461098157600080fd5b8063b0381b08146108ab578063b24f2d39146108dc578063bc197c811461090757600080fd5b8063a0a8e46011610143578063a32fa5b31161011d578063a32fa5b31461084b578063a96b14381461086b578063ac9650d81461087e57600080fd5b8063a0a8e460146107fa578063a217fddf14610816578063a22cb4651461082b57600080fd5b8063914e126a1461073257806391d148541461075f578063938e3d7b146107a557806395d89b41146107c55780639bcf7a15146107da57600080fd5b80632f2ff15d11610243578063600dd5ea116101ec5780638d4c446a116101c65780638d4c446a146106b25780638da5cb5b146106e05780639010d07c1461071257600080fd5b8063600dd5ea1461065257806361195e9414610672578063754b8fe71461069257600080fd5b80634cc157df1161021d5780634cc157df146105aa5780634e1273f4146105ec578063572b6c051461061957600080fd5b80632f2ff15d1461055357806336568abe146105735780633b1475a71461059357600080fd5b806313af4035116102a5578063248a9ca31161027f578063248a9ca3146104c75780632a55205a146104f45780632eb2c2d61461053357600080fd5b806313af403514610436578063150b7a02146104565780631da799c91461049a57600080fd5b8062fdd58e1461036957806301ffc9a71461039c57806306fdde03146103cc578063092e6075146103ee5780630e89341c1461041657600080fd5b3661036457336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103625760405162461bcd60e51b815260206004820152601460248201527f216e6174697665546f6b656e577261707065722e00000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561037557600080fd5b50610389610384366004614fed565b610a93565b6040519081526020015b60405180910390f35b3480156103a857600080fd5b506103bc6103b736600461502f565b610b2b565b6040519015158152602001610393565b3480156103d857600080fd5b506103e1610b89565b60405161039391906150a4565b6104016103fc366004615216565b610c18565b60408051928352602083019190915201610393565b34801561042257600080fd5b506103e16104313660046152df565b610e2e565b34801561044257600080fd5b506103626104513660046152f8565b610e39565b34801561046257600080fd5b50610481610471366004615315565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610393565b3480156104a657600080fd5b506104ba6104b5366004615381565b610e8a565b6040516103939190615403565b3480156104d357600080fd5b506103896104e23660046152df565b60009081526007602052604090205490565b34801561050057600080fd5b5061051461050f366004615381565b610f3d565b604080516001600160a01b039093168352602083019190915201610393565b34801561053f57600080fd5b5061036261054e3660046154a6565b610f7a565b34801561055f57600080fd5b5061036261056e366004615554565b61102e565b34801561057f57600080fd5b5061036261058e366004615554565b6110c8565b34801561059f57600080fd5b5061038961013a5481565b3480156105b657600080fd5b506105ca6105c53660046152df565b61112a565b604080516001600160a01b03909316835261ffff909116602083015201610393565b3480156105f857600080fd5b5061060c6106073660046155f3565b611195565b6040516103939190615692565b34801561062557600080fd5b506103bc6106343660046152f8565b6001600160a01b03166000908152606d602052604090205460ff1690565b34801561065e57600080fd5b5061036261066d366004614fed565b6112bf565b34801561067e57600080fd5b506103e161068d3660046152df565b61130e565b34801561069e57600080fd5b506103626106ad3660046156a5565b6113b3565b3480156106be57600080fd5b506106d26106cd3660046152df565b611685565b6040516103939291906157b7565b3480156106ec57600080fd5b506002546001600160a01b03165b6040516001600160a01b039091168152602001610393565b34801561071e57600080fd5b506106fa61072d366004615381565b611844565b34801561073e57600080fd5b5061075261074d366004615381565b611945565b60405161039391906157dc565b34801561076b57600080fd5b506103bc61077a366004615554565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156107b157600080fd5b506103626107c03660046157ef565b611ba8565b3480156107d157600080fd5b506103e1611bf6565b3480156107e657600080fd5b506103626107f5366004615824565b611c04565b34801561080657600080fd5b5060405160028152602001610393565b34801561082257600080fd5b50610389600081565b34801561083757600080fd5b5061036261084636600461586a565b611c59565b34801561085757600080fd5b506103bc610866366004615554565b611c6b565b610401610879366004615898565b611cc1565b34801561088a57600080fd5b5061089e610899366004615924565b611f40565b6040516103939190615966565b3480156108b757600080fd5b506103bc6108c63660046152df565b61013d6020526000908152604090205460ff1681565b3480156108e857600080fd5b506004546001600160a01b03811690600160a01b900461ffff166105ca565b34801561091357600080fd5b506104816109223660046154a6565b63bc197c8160e01b95945050505050565b34801561093f57600080fd5b5061038961094e3660046152df565b61013b6020526000908152604090205481565b34801561096d57600080fd5b5061038961097c3660046152df565b612035565b34801561098d57600080fd5b50635061636b60e01b610389565b3480156109a757600080fd5b506103896109b63660046152df565b60009081526003602052604090205490565b3480156109d457600080fd5b506103626109e3366004615554565b6120d0565b3480156109f457600080fd5b506103e16120e9565b348015610a0957600080fd5b506103bc610a183660046159c8565b6001600160a01b0391821660009081526101046020908152604080832093909416825291909152205460ff1690565b348015610a5357600080fd5b50610481610a623660046159f6565b63f23a6e6160e01b95945050505050565b348015610a7f57600080fd5b50610362610a8e3660046159f6565b6120f6565b60006001600160a01b038316610aff5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610359565b506000818152610103602090815260408083206001600160a01b03861684529091529020545b92915050565b6000610b368261219e565b80610b51575063152a902d60e11b6001600160e01b03198316145b80610b6c5750630a85bd0160e11b6001600160e01b03198316145b80610b255750506001600160e01b031916630271189760e51b1490565b6101358054610b9790615a5f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc390615a5f565b8015610c105780601f10610be557610100808354040283529160200191610c10565b820191906000526020600020905b815481529060010190602001808311610bf357829003601f168201915b505050505081565b60008061013854610c3081610c2b6121ee565b6121fd565b60026009541415610c835760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610359565b60026009558915801590610c9657508988145b610ccb5760405162461bcd60e51b81526004016103599060208082526004908201526310a632b760e11b604082015260600190565b61013954600090815260066020908152604080832083805290915290205460ff16610d435760005b8a811015610d4157610d2f610139548d8d84818110610d1457610d14615a94565b610d2a92602060809092020190810191506152f8565b612261565b610d3a600182615ac0565b9050610cf3565b505b61013a805493506001906000610d598387615ac0565b90915550610d7990508b8b8b8b8b886001600160801b038c16600061229f565b600084815261013c602090815260408083206001600160801b038a8116600160801b02908c161760019182015561013d8352818420805460ff1916909117905580519182019052908152909250610dd5908590859085906125cf565b604080516001600160a01b03861681526020810184905284917f529034575398e71312a0b7b951d8ca42dce1529d774f4a255a587f64f649fff8910160405180910390a250600160095590999098509650505050505050565b6060610b258261130e565b610e416126ed565b610e7e5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610359565b610e87816126fb565b50565b610eb6604080516080810190915260008082526020820190815260200160008152602001600081525090565b6000838152600360209081526040808320858452600290810183529281902081516080810190925280546001600160a01b038116835291939092840191600160a01b900460ff1690811115610f0d57610f0d6153a3565b6002811115610f1e57610f1e6153a3565b8152600182015460208201526002909101546040909101529392505050565b600080600080610f4c8661112a565b90945084925061ffff169050612710610f658287615ad8565b610f6f9190615b0d565b925050509250929050565b610f826121ee565b6001600160a01b0316856001600160a01b03161480610fa85750610fa885610a186121ee565b61101a5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610359565b611027858585858561274d565b5050505050565b6000828152600760205260409020546110479033612261565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff16156110ba5760405162461bcd60e51b815260206004820152601d60248201527f43616e206f6e6c79206772616e7420746f206e6f6e20686f6c646572730000006044820152606401610359565b6110c482826129c9565b5050565b336001600160a01b038216146111205760405162461bcd60e51b815260206004820152601a60248201527f43616e206f6e6c792072656e6f756e636520666f722073656c660000000000006044820152606401610359565b6110c482826129dd565b6000818152600560209081526040808320815180830190925280546001600160a01b031680835260019091015492820192909252829115611171578051602082015161118b565b6004546001600160a01b03811690600160a01b900461ffff165b9250925050915091565b606081518351146111fa5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610359565b6000835167ffffffffffffffff81111561121657611216615148565b60405190808252806020026020018201604052801561123f578160200160208202803683370190505b50905060005b84518110156112b75761128a85828151811061126357611263615a94565b602002602001015185838151811061127d5761127d615a94565b6020026020010151610a93565b82828151811061129c5761129c615a94565b60209081029190910101526112b081615b21565b9050611245565b509392505050565b6112c76126ed565b6113045760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610359565b6110c48282612a34565b600081815260036020526040902060010180546060919061132e90615a5f565b80601f016020809104026020016040519081016040528092919081815260200182805461135a90615a5f565b80156113a75780601f1061137c576101008083540402835291602001916113a7565b820191906000526020600020905b81548152906001019060200180831161138a57829003601f168201915b50505050509050919050565b600054610100900460ff166113ce5760005460ff16156113d2565b303b155b6114355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610359565b600054610100900460ff16158015611457576000805461ffff19166101011790555b7f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a67f86d5cf0a6bdc8d859ba3bdc97043337c82a0e609035f378e419298b6a3e00ae66114c2612ae9565b6000875160016114d29190615ac0565b67ffffffffffffffff8111156114ea576114ea615148565b604051908082528060200260200182016040528015611513578160200160208202803683370190505b50905060005b88518110156115785788818151811061153457611534615a94565b602002602001015182828151811061154e5761154e615a94565b6001600160a01b03909216602092830291909101909101528061157081615b21565b915050611519565b7f00000000000000000000000000000000000000000000000000000000000000008282815181106115ab576115ab615a94565b60200260200101906001600160a01b031690816001600160a01b0316815250506115d482612b1a565b6115dd8a612b52565b8b516115f1906101359060208f0190614f2f565b508a51611606906101369060208e0190614f2f565b506116108a612b82565b6116198d6126fb565b61162460008e6129c9565b61162e858e6129c9565b611638848e6129c9565b6116438560006129c9565b61164e8360006129c9565b6116588888612a34565b5050610137929092556101385561013955801561167b576000805461ff00191690555b5050505050505050565b600081815261013c602090815260408083208151815460809481028201850190935260608181018481529095869590949293928492918491908401828280156116ed57602002820191906000526020600020905b8154815260200190600101908083116116d9575b5050509183525050600191909101546001600160801b038082166020840152600160801b90910416604090910152905060006117358560009081526003602052604090205490565b90508067ffffffffffffffff81111561175057611750615148565b6040519080825280602002602001820160405280156117ad57816020015b61179a604080516080810190915260008082526020820190815260200160008152602001600081525090565b81526020019060019003908161176e5790505b5093508067ffffffffffffffff8111156117c9576117c9615148565b6040519080825280602002602001820160405280156117f2578160200160208202803683370190505b50925060005b818110156118395761180a8682610e8a565b85828151811061181c5761181c615a94565b6020908102919091010152611832600182615ac0565b90506117f8565b505051919391925050565b60008281526008602052604081205481805b8281101561193c5760008681526008602090815260408083208484526001019091529020546001600160a01b0316156118d357848214156118c15760008681526008602090815260408083209383526001909301905220546001600160a01b03169250610b25915050565b6118cc600183615ac0565b915061192a565b600086815260066020908152604080832083805290915290205460ff1680156119175750600086815260086020908152604080832083805260020190915290205481145b1561192a57611927600183615ac0565b91505b611935600182615ac0565b9050611856565b50505092915050565b60606002600954141561199a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610359565b600260095560006119a96121ee565b336000908152606d602052604090205490915060ff16806119d257506001600160a01b03811632145b611a075760405162461bcd60e51b81526004016103599060208082526004908201526321454f4160e01b604082015260600190565b82611a128286610a93565b1015611a495760405162461bcd60e51b8152600401610359906020808252600490820152630850985b60e21b604082015260600190565b600084815261013c602090815260408083208151815460809481028201850190935260608101838152909391928492849190840182828015611aaa57602002820191906000526020600020905b815481526020019060010190808311611a96575b5050509183525050600191909101546001600160801b03808216602080850191909152600160801b90920481166040909301929092528201519192504291161115611b235760405162461bcd60e51b815260206004820152600960248201526831b0b73a1037b832b760b91b6044820152606401610359565b6000611b3e868684604001516001600160801b031685612c64565b9050611b4b838787613079565b611b56308483613203565b826001600160a01b0316867f58bbfaa763248693d05ac650926341943af86affd998d80e41dbcc9adfdae6078784604051611b92929190615b3c565b60405180910390a3600160095595945050505050565b611bb06126ed565b611bed5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610359565b610e8781612b82565b6101368054610b9790615a5f565b611c0c6126ed565b611c495760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610359565b611c54838383613325565b505050565b6110c4611c646121ee565b83836133ef565b600082815260066020908152604080832083805290915281205460ff16611cb8575060008281526006602090815260408083206001600160a01b038516845290915290205460ff16610b25565b50600192915050565b60008061013854611cd481610c2b6121ee565b60026009541415611d275760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610359565b6002600955600089815261013d602052604090205460ff16611d765760405162461bcd60e51b815260206004820152600860248201526708505b1b1bddd95960c21b6044820152606401610359565b8615801590611d8457508685145b611db95760405162461bcd60e51b81526004016103599060208082526004908201526310a632b760e11b604082015260600190565b611dc3848a610a93565b611df85760405162461bcd60e51b8152600401610359906020808252600490820152630850985b60e21b604082015260600190565b61013954600090815260066020908152604080832083805290915290205460ff16611e555760005b87811015611e5357611e41610139548a8a84818110610d1457610d14615a94565b611e4c600182615ac0565b9050611e20565b505b600061013c60008b815260200190815260200160002060010160109054906101000a90046001600160801b03166001600160801b03169050611ead89898989604051806020016040528060008152508f87600161229f565b60008b815261013b6020526040902054909350611ecb908490615ac0565b9350611ee8858b85604051806020016040528060008152506125cf565b604080516001600160a01b0387168152602081018590528b917fdf54045461e7fa6cda88afd9b979d29bb9ef67b8271562cec9a7a95ddc3afe72910160405180910390a2505060016009559097909650945050505050565b60608167ffffffffffffffff811115611f5b57611f5b615148565b604051908082528060200260200182016040528015611f8e57816020015b6060815260200190600190039081611f795790505b50905060005b8281101561202e57611ffe30858584818110611fb257611fb2615a94565b9050602002810190611fc49190615b55565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134c992505050565b82828151811061201057612010615a94565b6020026020010181905250808061202690615b21565b915050611f94565b5092915050565b600081815260086020526040812054815b818110156120995760008481526008602090815260408083208484526001019091529020546001600160a01b03161561208757612084600184615ac0565b92505b612092600182615ac0565b9050612046565b50600083815260066020908152604080832083805290915290205460ff16156120ca576120c7600183615ac0565b91505b50919050565b6000828152600760205260409020546111209033612261565b60018054610b9790615a5f565b6120fe6121ee565b6001600160a01b0316856001600160a01b03161480612124575061212485610a186121ee565b6121825760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610359565b61102785858585856135bd565b6001600160a01b03163b151590565b60006001600160e01b03198216636cdb3d1360e11b14806121cf57506001600160e01b031982166303a24d0760e21b145b80610b2557506301ffc9a760e01b6001600160e01b0319831614610b25565b60006121f861376c565b905090565b6122078282611c6b565b6110c45761221f816001600160a01b03166014613799565b61222a836020613799565b60405160200161223b929190615b9c565b60408051601f198184030181529082905262461bcd60e51b8252610359916004016150a4565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff166110c45761221f816001600160a01b03166014613799565b60008060005b898110156124a3578a8a828181106122bf576122bf615a94565b90506080020160600135600014156123015760405162461bcd60e51b81526020600482015260056024820152640c08185b5d60da1b6044820152606401610359565b88888281811061231357612313615a94565b905060200201358b8b8381811061232c5761232c615a94565b905060800201606001356123409190615c1d565b156123725760405162461bcd60e51b815260206004820152600260248201526110a960f11b6044820152606401610359565b60018b8b8381811061238657612386615a94565b905060800201602001602081019061239e9190615c3e565b60028111156123af576123af6153a3565b1415806123d757508a8a828181106123c9576123c9615a94565b905060800201606001356001145b6124085760405162461bcd60e51b815260206004820152600260248201526110a960f11b6044820152606401610359565b88888281811061241a5761241a615a94565b905060200201358261242c9190615ac0565b600087815261013c6020526040902090925089898381811061245057612450615a94565b905060200201358c8c8481811061246957612469615a94565b9050608002016060013561247d9190615b0d565b81546001818101845560009384526020909320015561249c9082615ac0565b90506122a5565b506124ae8482615c1d565b156124e45760405162461bcd60e51b81526004016103599060208082526004908201526308505b5d60e21b604082015260600190565b6124ee8482615b0d565b915082156125ae5760005b89811015612544576125328b8b8381811061251657612516615a94565b90506080020180360381019061252c9190615c5b565b87613949565b61253d600182615ac0565b90506124f9565b506125a96125506121ee565b308c8c808060200260200160405190810160405280939291908181526020016000905b8282101561259f5761259060808302860136819003810190615c5b565b81526020019060010190612573565b5050505050613203565b6125c2565b6125c26125b96121ee565b8b8b8989613a0e565b5098975050505050505050565b6001600160a01b03841661262f5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610359565b60006126396121ee565b905061265a8160008761264b88613a76565b61265488613a76565b87613ac1565b6000848152610103602090815260408083206001600160a01b03891684529091528120805485929061268d908490615ac0565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461102781600087878787613d7f565b60006121f88161077a6121ee565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a35050565b81518351146127af5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610359565b6001600160a01b0384166128135760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610359565b600061281d6121ee565b905061282d818787878787613ac1565b60005b845181101561295b57600085828151811061284d5761284d615a94565b60200260200101519050600085838151811061286b5761286b615a94565b6020908102919091018101516000848152610103835260408082206001600160a01b038e1683529093529190912054909150818110156129005760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610359565b6000838152610103602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612940908490615ac0565b925050819055505050508061295490615b21565b9050612830565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516129ab929190615cd0565b60405180910390a46129c1818787878787613f25565b505050505050565b6129d38282614021565b6110c4828261407c565b6129e782826140e9565b60008281526008602090815260408083206001600160a01b03851680855260028201808552838620805487526001909301855292852080546001600160a01b031916905584529152555050565b612710811115612a785760405162461bcd60e51b815260206004820152600f60248201526e45786365656473206d61782062707360881b6044820152606401610359565b600480546001600160a01b03841675ffffffffffffffffffffffffffffffffffffffffffff199091168117600160a01b61ffff851602179091556040518281527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb9060200160405180910390a25050565b600054610100900460ff16612b105760405162461bcd60e51b815260040161035990615ce3565b612b1861414b565b565b600054610100900460ff16612b415760405162461bcd60e51b815260040161035990615ce3565b612b49614179565b610e87816141a0565b600054610100900460ff16612b795760405162461bcd60e51b815260040161035990615ce3565b610e878161422f565b600060018054612b9190615a5f565b80601f0160208091040260200160405190810160405280929190818152602001828054612bbd90615a5f565b8015612c0a5780601f10612bdf57610100808354040283529160200191612c0a565b820191906000526020600020905b815481529060010190602001808311612bed57829003601f168201915b50508551939450612c2693600193506020870192509050614f2f565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a168183604051612c58929190615d2e565b60405180910390a15050565b60606000612c728486615ad8565b90508067ffffffffffffffff811115612c8d57612c8d615148565b604051908082528060200260200182016040528015612cea57816020015b612cd7604080516080810190915260008082526020820190815260200160008152602001600081525090565b815260200190600190039081612cab5790505b50600087815261013b602052604081205491935090612d0a908690615ad8565b600088815260036020526040812054919250612d2461425f565b90506000612d318a611685565b50905060008367ffffffffffffffff811115612d4f57612d4f615148565b604051908082528060200260200182016040528015612d78578160200160208202803683370190505b50905060005b8681101561300957604080516020808201879052818301849052825180830384018152606090920190925280519101206000612dba8883615c1d565b90506000805b88811015612ff15760008d600001518281518110612de057612de0615a94565b6020026020010151888381518110612dfa57612dfa615a94565b602002602001015160600151612e109190615b0d565b9050612e1c8184615ac0565b841015612fd2578d51805183908110612e3757612e37615a94565b6020026020010151888381518110612e5157612e51615a94565b6020026020010151606001818151612e699190615d53565b9052508651600190889084908110612e8357612e83615a94565b602002602001019015159081151581525050878281518110612ea757612ea7615a94565b6020026020010151600001518d8781518110612ec557612ec5615a94565b60209081029190910101516001600160a01b0390911690528751889083908110612ef157612ef1615a94565b6020026020010151602001518d8781518110612f0f57612f0f615a94565b6020026020010151602001906002811115612f2c57612f2c6153a3565b90816002811115612f3f57612f3f6153a3565b81525050878281518110612f5557612f55615a94565b6020026020010151604001518d8781518110612f7357612f73615a94565b6020908102919091010151604001528d51805183908110612f9657612f96615a94565b60200260200101518d8781518110612fb057612fb0615a94565b602090810291909101015160600152612fca60018c615d53565b9a5050612ff1565b612fdc8184615ac0565b925050612fea600182615ac0565b9050612dc0565b505050506001816130029190615ac0565b9050612d7e565b5060005b8481101561306a5781818151811061302757613027615a94565b6020026020010151156130585761305883828151811061304957613049615a94565b60200260200101518d836142be565b613063600182615ac0565b905061300d565b50505050505050949350505050565b6001600160a01b0383166130db5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610359565b60006130e56121ee565b9050613115818560006130f787613a76565b61310087613a76565b60405180602001604052806000815250613ac1565b6000838152610103602090815260408083206001600160a01b0388168452909152902054828110156131955760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610359565b6000848152610103602090815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6000805b82518110156132d55773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b031683828151811061324057613240615a94565b6020026020010151600001516001600160a01b031614801561326a57506001600160a01b03841630145b1561329f5782818151811061328157613281615a94565b602002602001015160600151826132989190615ac0565b91506132c3565b6132c385858584815181106132b6576132b6615a94565b602002602001015161439c565b6132ce600182615ac0565b9050613207565b50801561331f576040805160808101825273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152600060208201819052918101919091526060810182905261102785858361439c565b50505050565b6127108111156133695760405162461bcd60e51b815260206004820152600f60248201526e45786365656473206d61782062707360881b6044820152606401610359565b6040805180820182526001600160a01b038481168083526020808401868152600089815260058352869020945185546001600160a01b031916941693909317845591516001909301929092559151838152909185917f7365cf4122f072a3365c20d54eff9b38d73c096c28e1892ec8f5b0e403a0f12d91015b60405180910390a3505050565b816001600160a01b0316836001600160a01b031614156134635760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610359565b6001600160a01b0383811660008181526101046020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191016133e2565b60606001600160a01b0383163b6135315760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610359565b600080846001600160a01b03168460405161354c9190615d6a565b600060405180830381855af49150503d8060008114613587576040519150601f19603f3d011682016040523d82523d6000602084013e61358c565b606091505b50915091506135b48282604051806060016040528060278152602001615f9e602791396144fb565b95945050505050565b6001600160a01b0384166136215760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610359565b600061362b6121ee565b905061363c81878761264b88613a76565b6000848152610103602090815260408083206001600160a01b038a168452909152902054838110156136c35760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610359565b6000858152610103602090815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290613703908490615ac0565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4613763828888888888613d7f565b50505050505050565b336000908152606d602052604081205460ff1615613791575060131936013560601c90565b503390565b90565b606060006137a8836002615ad8565b6137b3906002615ac0565b67ffffffffffffffff8111156137cb576137cb615148565b6040519080825280601f01601f1916602001820160405280156137f5576020820181803683370190505b509050600360fc1b8160008151811061381057613810615a94565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061383f5761383f615a94565b60200101906001600160f81b031916908160001a9053506000613863846002615ad8565b61386e906001615ac0565b90505b60018111156138f3577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106138af576138af615a94565b1a60f81b8282815181106138c5576138c5615a94565b60200101906001600160f81b031916908160001a90535060049490941c936138ec81615d86565b9050613871565b5083156139425760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610359565b9392505050565b61395282614534565b600081815260036020908152604080832080548085526002918201845291909320855181546001600160a01b039091166001600160a01b0319821681178355938701519294879492939284926001600160a81b0319161790600160a01b9084908111156139c1576139c16153a3565b021790555060408201518160010155606082015181600201559050506001600360008481526020019081526020016000206000016000828254613a049190615ac0565b9091555050505050565b613a19848483614866565b613a23828261498f565b61102785308686808060200260200160405190810160405280939291908181526020016000905b8282101561259f57613a6760808302860136819003810190615c5b565b81526020019060010190613a4a565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613ab057613ab0615a94565b602090810291909101015292915050565b61013754600090815260066020908152604080832083805290915290205460ff16158015613af757506001600160a01b03851615155b8015613b0b57506001600160a01b03841615155b15613ba8576101375460009081526006602090815260408083206001600160a01b038916845290915290205460ff1680613b6b57506101375460009081526006602090815260408083206001600160a01b038816845290915290205460ff165b613ba85760405162461bcd60e51b815260206004820152600e60248201526d215452414e534645525f524f4c4560901b6044820152606401610359565b6001600160a01b038516613c345760005b8351811015613c2e57828181518110613bd457613bd4615a94565b602002602001015161013b6000868481518110613bf357613bf3615a94565b602002602001015181526020019081526020016000206000828254613c189190615ac0565b90915550613c27905081615b21565b9050613bb9565b50613cf9565b60005b8351811015613cf75761013d6000858381518110613c5757613c57615a94565b60209081029190910181015182528101919091526040016000205460ff168015613c9b5750828181518110613c8e57613c8e615a94565b6020026020010151600014155b15613ce757600061013d6000868481518110613cb957613cb9615a94565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613cf081615b21565b9050613c37565b505b6001600160a01b0384166129c15760005b835181101561376357828181518110613d2557613d25615a94565b602002602001015161013b6000868481518110613d4457613d44615a94565b602002602001015181526020019081526020016000206000828254613d699190615d53565b90915550613d78905081615b21565b9050613d0a565b6001600160a01b0384163b156129c15760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190613dc39089908990889088908890600401615d9d565b6020604051808303816000875af1925050508015613dfe575060408051601f3d908101601f19168201909252613dfb91810190615dd5565b60015b613eb457613e0a615df2565b806308c379a01415613e445750613e1f615e0d565b80613e2a5750613e46565b8060405162461bcd60e51b815260040161035991906150a4565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610359565b6001600160e01b0319811663f23a6e6160e01b146137635760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610359565b6001600160a01b0384163b156129c15760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190613f699089908990889088908890600401615e97565b6020604051808303816000875af1925050508015613fa4575060408051601f3d908101601f19168201909252613fa191810190615dd5565b60015b613fb057613e0a615df2565b6001600160e01b0319811663bc197c8160e01b146137635760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610359565b60008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60008281526008602052604081208054916001919061409b8385615ac0565b9091555050600092835260086020908152604080852083865260018101835281862080546001600160a01b039096166001600160a01b03199096168617905593855260029093019052912055565b6140f38282612261565b60008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600054610100900460ff166141725760405162461bcd60e51b815260040161035990615ce3565b6001600955565b600054610100900460ff16612b185760405162461bcd60e51b815260040161035990615ce3565b600054610100900460ff166141c75760405162461bcd60e51b815260040161035990615ce3565b60005b81518110156110c4576001606d60008484815181106141eb576141eb615a94565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061422781615b21565b9150506141ca565b600054610100900460ff166142565760405162461bcd60e51b815260040161035990615ce3565b610e87816149b4565b60006142696121ee565b614274600143615d53565b60405160609290921b6bffffffffffffffffffffffff191660208301524060348201524460548201526074016040516020818303038152906040528051906020012060001c905090565b60008281526003602052604090205481106143075760405162461bcd60e51b8152602060048201526009602482015268696e64657820444e4560b81b6044820152606401610359565b61431083614534565b6000828152600360209081526040808320848452600290810183529220855181546001600160a01b039091166001600160a01b03198216811783559287015187949293909284926001600160a81b03191690911790600160a01b90849081111561437c5761437c6153a3565b021790555060408201516001820155606090910151600290910155505050565b6000816020015160028111156143b4576143b46153a3565b14156143ef57611c548160000151848484606001517f00000000000000000000000000000000000000000000000000000000000000006149c8565b600181602001516002811115614407576144076153a3565b141561447c5780516040808301519051632142170760e11b81526001600160a01b038681166004830152858116602483015260448201929092529116906342842e0e906064015b600060405180830381600087803b15801561446857600080fd5b505af1158015613763573d6000803e3d6000fd5b600281602001516002811115614494576144946153a3565b1415611c5457805160408083015160608401519151637921219560e11b81526001600160a01b03878116600483015286811660248301526044820192909252606481019290925260a06084830152600060a48301529091169063f242432a9060c40161444e565b6060831561450a575081613942565b82511561451a5782518084602001fd5b8160405162461bcd60e51b815260040161035991906150a4565b60018160200151600281111561454c5761454c6153a3565b14156146305780516040516301ffc9a760e01b81526380ac58cd60e01b60048201526001600160a01b03909116906301ffc9a7906024015b602060405180830381865afa9250505080156145bd575060408051601f3d908101601f191682019092526145ba91810190615ef5565b60015b6145f65760405162461bcd60e51b815260206004820152600a60248201526921546f6b656e5479706560b01b6044820152606401610359565b806110c45760405162461bcd60e51b815260206004820152600a60248201526921546f6b656e5479706560b01b6044820152606401610359565b600281602001516002811115614648576146486153a3565b14156146845780516040516301ffc9a760e01b8152636cdb3d1360e11b60048201526001600160a01b03909116906301ffc9a790602401614584565b60008160200151600281111561469c5761469c6153a3565b1415610e875780516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610e875780516040516301ffc9a760e01b81526380ac58cd60e01b60048201526001600160a01b03909116906301ffc9a790602401602060405180830381865afa925050508015614731575060408051601f3d908101601f1916820190925261472e91810190615ef5565b60015b61475b5761473d615df2565b806308c379a014156110c45750614752615e0d565b806110c4575050565b80156147965760405162461bcd60e51b815260206004820152600a60248201526921546f6b656e5479706560b01b6044820152606401610359565b81516040516301ffc9a760e01b8152636cdb3d1360e11b60048201526001600160a01b03909116906301ffc9a790602401602060405180830381865afa925050508015614800575060408051601f3d908101601f191682019092526147fd91810190615ef5565b60015b61482b5761480c615df2565b806308c379a01415611c545750614821615e0d565b80611c5457505050565b8015611c545760405162461bcd60e51b815260206004820152600a60248201526921546f6b656e5479706560b01b6044820152606401610359565b818061489e5760405162461bcd60e51b815260206004820152600760248201526621546f6b656e7360c81b6044820152606401610359565b600082815260036020526040902054156148e65760405162461bcd60e51b815260206004820152600960248201526869642065786973747360b81b6044820152606401610359565b60005b8181101561497a5761492185858381811061490657614906615a94565b90506080020180360381019061491c9190615c5b565b614534565b84848281811061493357614933615a94565b600086815260036020908152604080832087845260020190915290206080909102929092019190506149658282615f12565b506149739050600182615ac0565b90506148e9565b50600091825260036020526040909120555050565b60008181526003602090815260409091208351611c5492600190920191850190614f2f565b80516110c490610105906020840190614f2f565b816149d257611027565b6001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415614b36576001600160a01b038416301415614a7257604051632e1a7d4d60e01b8152600481018390526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b158015614a4a57600080fd5b505af1158015614a5e573d6000803e3d6000fd5b50505050614a6d838383614b42565b611027565b6001600160a01b038316301415614b2b57348214614ad25760405162461bcd60e51b815260206004820152601360248201527f6d73672e76616c756520213d20616d6f756e74000000000000000000000000006044820152606401610359565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015614b0d57600080fd5b505af1158015614b21573d6000803e3d6000fd5b5050505050611027565b614a6d838383614b42565b61102785858585614c07565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114614b8f576040519150601f19603f3d011682016040523d82523d6000602084013e614b94565b606091505b505090508061331f57816001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015614bd857600080fd5b505af1158015614bec573d6000803e3d6000fd5b5061331f935050506001600160a01b03841690508585614c65565b816001600160a01b0316836001600160a01b03161415614c265761331f565b6001600160a01b038316301415614c5057614c4b6001600160a01b0385168383614c65565b61331f565b61331f6001600160a01b038516848484614cdd565b6040516001600160a01b038316602482015260448101829052611c5490849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152614d15565b6040516001600160a01b038085166024830152831660448201526064810182905261331f9085906323b872dd60e01b90608401614c91565b6000614d6a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614de79092919063ffffffff16565b805190915015611c545780806020019051810190614d889190615ef5565b611c545760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610359565b6060614df68484600085614dfe565b949350505050565b606082471015614e5f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610359565b6001600160a01b0385163b614eb65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610359565b600080866001600160a01b03168587604051614ed29190615d6a565b60006040518083038185875af1925050503d8060008114614f0f576040519150601f19603f3d011682016040523d82523d6000602084013e614f14565b606091505b5091509150614f248282866144fb565b979650505050505050565b828054614f3b90615a5f565b90600052602060002090601f016020900481019282614f5d5760008555614fa3565b82601f10614f7657805160ff1916838001178555614fa3565b82800160010185558215614fa3579182015b82811115614fa3578251825591602001919060010190614f88565b50614faf929150614fb3565b5090565b5b80821115614faf5760008155600101614fb4565b6001600160a01b0381168114610e8757600080fd5b8035614fe881614fc8565b919050565b6000806040838503121561500057600080fd5b823561500b81614fc8565b946020939093013593505050565b6001600160e01b031981168114610e8757600080fd5b60006020828403121561504157600080fd5b813561394281615019565b60005b8381101561506757818101518382015260200161504f565b8381111561331f5750506000910152565b6000815180845261509081602086016020860161504c565b601f01601f19169290920160200192915050565b6020815260006139426020830184615078565b60008083601f8401126150c957600080fd5b50813567ffffffffffffffff8111156150e157600080fd5b6020830191508360208260071b85010111156150fc57600080fd5b9250929050565b60008083601f84011261511557600080fd5b50813567ffffffffffffffff81111561512d57600080fd5b6020830191508360208260051b85010111156150fc57600080fd5b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff8111828210171561518457615184615148565b6040525050565b600082601f83011261519c57600080fd5b813567ffffffffffffffff8111156151b6576151b6615148565b6040516151cd601f8301601f19166020018261515e565b8181528460208386010111156151e257600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160801b0381168114614fe857600080fd5b60008060008060008060008060c0898b03121561523257600080fd5b883567ffffffffffffffff8082111561524a57600080fd5b6152568c838d016150b7565b909a50985060208b013591508082111561526f57600080fd5b61527b8c838d01615103565b909850965060408b013591508082111561529457600080fd5b506152a18b828c0161518b565b9450506152b060608a016151ff565b92506152be60808a016151ff565b915060a08901356152ce81614fc8565b809150509295985092959890939650565b6000602082840312156152f157600080fd5b5035919050565b60006020828403121561530a57600080fd5b813561394281614fc8565b6000806000806080858703121561532b57600080fd5b843561533681614fc8565b9350602085013561534681614fc8565b925060408501359150606085013567ffffffffffffffff81111561536957600080fd5b6153758782880161518b565b91505092959194509250565b6000806040838503121561539457600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0381511682526020810151600381106153e957634e487b7160e01b600052602160045260246000fd5b602083015260408181015190830152606090810151910152565b60808101610b2582846153b9565b600067ffffffffffffffff82111561542b5761542b615148565b5060051b60200190565b600082601f83011261544657600080fd5b8135602061545382615411565b604051615460828261515e565b83815260059390931b850182019282810191508684111561548057600080fd5b8286015b8481101561549b5780358352918301918301615484565b509695505050505050565b600080600080600060a086880312156154be57600080fd5b85356154c981614fc8565b945060208601356154d981614fc8565b9350604086013567ffffffffffffffff808211156154f657600080fd5b61550289838a01615435565b9450606088013591508082111561551857600080fd5b61552489838a01615435565b9350608088013591508082111561553a57600080fd5b506155478882890161518b565b9150509295509295909350565b6000806040838503121561556757600080fd5b82359150602083013561557981614fc8565b809150509250929050565b600082601f83011261559557600080fd5b813560206155a282615411565b6040516155af828261515e565b83815260059390931b85018201928281019150868411156155cf57600080fd5b8286015b8481101561549b5780356155e681614fc8565b83529183019183016155d3565b6000806040838503121561560657600080fd5b823567ffffffffffffffff8082111561561e57600080fd5b61562a86838701615584565b9350602085013591508082111561564057600080fd5b5061564d85828601615435565b9150509250929050565b600081518084526020808501945080840160005b838110156156875781518752958201959082019060010161566b565b509495945050505050565b6020815260006139426020830184615657565b600080600080600080600060e0888a0312156156c057600080fd5b6156c988614fdd565b9650602088013567ffffffffffffffff808211156156e657600080fd5b6156f28b838c0161518b565b975060408a013591508082111561570857600080fd5b6157148b838c0161518b565b965060608a013591508082111561572a57600080fd5b6157368b838c0161518b565b955060808a013591508082111561574c57600080fd5b506157598a828b01615584565b93505061576860a08901614fdd565b915060c0880135905092959891949750929550565b600081518084526020808501945080840160005b83811015615687576157a48783516153b9565b6080969096019590820190600101615791565b6040815260006157ca604083018561577d565b82810360208401526135b48185615657565b602081526000613942602083018461577d565b60006020828403121561580157600080fd5b813567ffffffffffffffff81111561581857600080fd5b614df68482850161518b565b60008060006060848603121561583957600080fd5b83359250602084013561584b81614fc8565b929592945050506040919091013590565b8015158114610e8757600080fd5b6000806040838503121561587d57600080fd5b823561588881614fc8565b915060208301356155798161585c565b600080600080600080608087890312156158b157600080fd5b86359550602087013567ffffffffffffffff808211156158d057600080fd5b6158dc8a838b016150b7565b909750955060408901359150808211156158f557600080fd5b5061590289828a01615103565b909450925050606087013561591681614fc8565b809150509295509295509295565b6000806020838503121561593757600080fd5b823567ffffffffffffffff81111561594e57600080fd5b61595a85828601615103565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156159bb57603f198886030184526159a9858351615078565b9450928501929085019060010161598d565b5092979650505050505050565b600080604083850312156159db57600080fd5b82356159e681614fc8565b9150602083013561557981614fc8565b600080600080600060a08688031215615a0e57600080fd5b8535615a1981614fc8565b94506020860135615a2981614fc8565b93506040860135925060608601359150608086013567ffffffffffffffff811115615a5357600080fd5b6155478882890161518b565b600181811c90821680615a7357607f821691505b602082108114156120ca57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115615ad357615ad3615aaa565b500190565b6000816000190483118215151615615af257615af2615aaa565b500290565b634e487b7160e01b600052601260045260246000fd5b600082615b1c57615b1c615af7565b500490565b6000600019821415615b3557615b35615aaa565b5060010190565b828152604060208201526000614df6604083018461577d565b6000808335601e19843603018112615b6c57600080fd5b83018035915067ffffffffffffffff821115615b8757600080fd5b6020019150368190038213156150fc57600080fd5b7f5065726d697373696f6e733a206163636f756e74200000000000000000000000815260008351615bd481601585016020880161504c565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006015918401918201528351615c1181602684016020880161504c565b01602601949350505050565b600082615c2c57615c2c615af7565b500690565b60038110610e8757600080fd5b600060208284031215615c5057600080fd5b813561394281615c31565b600060808284031215615c6d57600080fd5b6040516080810181811067ffffffffffffffff82111715615c9057615c90615148565b6040528235615c9e81614fc8565b81526020830135615cae81615c31565b6020820152604083810135908201526060928301359281019290925250919050565b6040815260006157ca6040830185615657565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b604081526000615d416040830185615078565b82810360208401526135b48185615078565b600082821015615d6557615d65615aaa565b500390565b60008251615d7c81846020870161504c565b9190910192915050565b600081615d9557615d95615aaa565b506000190190565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152614f2460a0830184615078565b600060208284031215615de757600080fd5b815161394281615019565b600060033d11156137965760046000803e5060005160e01c90565b600060443d1015615e1b5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715615e4b57505050505090565b8285019150815181811115615e635750505050505090565b843d8701016020828501011115615e7d5750505050505090565b615e8c6020828601018761515e565b509095945050505050565b60006001600160a01b03808816835280871660208401525060a06040830152615ec360a0830186615657565b8281036060840152615ed58186615657565b90508281036080840152615ee98185615078565b98975050505050505050565b600060208284031215615f0757600080fd5b81516139428161585c565b8135615f1d81614fc8565b6001600160a01b03811690508154816001600160a01b031982161783556020840135615f4881615c31565b60038110615f6657634e487b7160e01b600052602160045260246000fd5b6001600160a81b03199190911690911760a09190911b60ff60a01b161781556040820135600182015560609091013560029091015556fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212203b557ca6b651d4159fcc952e95f73fd2a4e166725cd1b471000a0b8d2566ace964736f6c634300080c0033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000076ce2cb1ae48fa067f4fb8c5f803111ae0b24bea