0 txs
1 call
constructor
constructor()
functions
balanceOf
viewfunction balanceOf(address account, uint256 id) view returns (uint256)
balanceOfBatch
viewfunction balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[])
baseURI
viewfunction baseURI() view returns (string)
credentialId
viewfunction credentialId() view returns (uint256)
credentialType
viewfunction credentialType() view returns (string)
exists
viewfunction exists(uint256 id) view returns (bool)
getArtId
viewfunction getArtId(uint256 tokenId_) view returns (string)
getArtInfoFromFactory
viewfunction getArtInfoFromFactory(string artId_) view returns (tuple)
getPhiFactoryContract
viewfunction getPhiFactoryContract() view returns (address)
getRoyalties
viewfunction getRoyalties(uint256 tokenId) view returns (tuple)
getTokenId
viewfunction getTokenId(string artId_) view returns (uint256)
isApprovedForAll
viewfunction isApprovedForAll(address account, address operator) view returns (bool)
mintFee
viewfunction mintFee(uint256 tokenId_) view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
phiFactoryContract
viewfunction phiFactoryContract() view returns (address)
phiRewardsContract
viewfunction phiRewardsContract() view returns (address)
protocolFeeDestination
viewfunction protocolFeeDestination() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
royalties
viewfunction royalties(uint256) view returns (uint32 royaltyMintSchedule, uint32 royaltyBPS, address royaltyRecipient)
royaltyInfo
viewfunction royaltyInfo(uint256 tokenId, uint256 salePrice) view returns (address receiver, uint256 royaltyAmount)
soulBounded
viewfunction soulBounded(uint256 tokenId_) view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
totalSupply
viewfunction totalSupply(uint256 id) view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
uri
viewfunction uri(uint256 tokenId_, address holder_) view returns (string)
uri
viewfunction uri(uint256 tokenId_) view returns (string)
verificationType
viewfunction verificationType() view returns (string)
version
purefunction version() pure returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
claimFromFactory
payablefunction claimFromFactory(string artId_, address minter_, address ref_, address verifier_, uint256 quantity_, bytes32 data_, string imageURI_) payable
createArtFromFactory
payablefunction createArtFromFactory(string artId_, string uri_) payable returns (uint256)
initialize
nonpayablefunction initialize(uint256 credentialId_, address protocolFeeDestination_, address phiRewardsContract_, string verificationType_)
merkleClaim
payablefunction merkleClaim() payable
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
safeBatchTransferFrom
nonpayablefunction safeBatchTransferFrom(address from_, address to_, uint256[] ids_, uint256[] values_, bytes data_)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from_, address to_, uint256 id_, uint256 value_, bytes data_)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setBaseURI
nonpayablefunction setBaseURI(string baseURI_)
setTokenURI
nonpayablefunction setTokenURI(uint256 tokenId_, string uri_)
signatureClaim
payablefunction signatureClaim() payable
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unPause
nonpayablefunction unPause()
updatedRoyalties
nonpayablefunction updatedRoyalties(uint256 tokenId_, tuple configuration)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
ApprovalForAll
event ApprovalForAll(address indexed account, address indexed operator, bool approved)
ArtClaimedData
event ArtClaimedData(address indexed recipient, address indexed artistRewardReceiver, address indexed referrer, address verifier, uint256 tokenId, uint256 amount, bytes32 data)
ArtCreated
event ArtCreated(string artId, uint256 tokenId, string uri)
Initialized
event Initialized(uint64 version)
InitializePhiNFT1155
event InitializePhiNFT1155(uint256 credentialId, address protocolFeeDestination, address phiRewardsAddress, string verificationType)
MintComment
event MintComment(address indexed to, address from, uint256 tokenId, string tokenURI)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
TransferBatch
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)
TransferSingle
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)
Unpaused
event Unpaused(address account)
UpdatedRoyalties
event UpdatedRoyalties(uint256 indexed tokenId, address indexed user, (uint32 royaltyMintSchedule, uint32 royaltyBPS, address royaltyRecipient) configuration)
Upgraded
event Upgraded(address indexed implementation)
URI
event URI(string value, uint256 indexed id)
errors
AddressAlreadyMinted
error AddressAlreadyMinted()
AddressEmptyCode
error AddressEmptyCode(address target)
AddressNotSigned
error AddressNotSigned()
AlreadyWithdrawn
error AlreadyWithdrawn()
EnforcedPause
error EnforcedPause()
ERC1155InsufficientBalance
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId)
ERC1155InvalidApprover
error ERC1155InvalidApprover(address approver)
ERC1155InvalidArrayLength
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength)
ERC1155InvalidOperator
error ERC1155InvalidOperator(address operator)
ERC1155InvalidReceiver
error ERC1155InvalidReceiver(address receiver)
ERC1155InvalidSender
error ERC1155InvalidSender(address sender)
ERC1155MissingApprovalForAll
error ERC1155MissingApprovalForAll(address operator, address owner)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
InsufficientETHBalance
error InsufficientETHBalance()
InsufficientTokenBalance
error InsufficientTokenBalance()
InValdidTokenId
error InValdidTokenId()
InvalidClaimFee
error InvalidClaimFee()
InvalidInitialization
error InvalidInitialization()
InvalidMintSchedule
error InvalidMintSchedule()
InvalidTo
error InvalidTo()
NotArtCreator
error NotArtCreator()
NotEnded
error NotEnded()
NotInitializing
error NotInitializing()
NotPhiFactory
error NotPhiFactory()
NotStarted
error NotStarted()
OverMaxAllowedToMint
error OverMaxAllowedToMint()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
TokenNotTransferable
error TokenNotTransferable()
TxOriginMismatch
error TxOriginMismatch()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60e06040523060805261271060a052736d83cac25cfacdc7035bed947b92b64e6a8b809060c05234801561003257600080fd5b5061003b610040565b6100f2565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100905760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100ef5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805160a05160c051614f2961012f6000396000611f14015260006112440152600081816126f10152818161271a01526128cf0152614f296000f3fe6080604052600436106102fc5760003560e01c8063715018a61161018d578063a747a3ea116100e0578063e30c39781161008f578063f242432a1161006c578063f242432a14610a05578063f2fde38b14610a25578063f50b31b714610a45578063f7b188a514610a4d57005b8063e30c397814610980578063e752c44a14610995578063e985e9c51461099d57005b8063bd85b039116100bd578063bd85b03914610901578063d82109361461094d578063db968e081461096257005b8063a747a3ea14610842578063ad3cb1cc14610862578063bb3bafd6146108ab57005b80638a35ace31161013c57806395d89b411161011957806395d89b41146107f7578063a22cb4651461080c578063a3c0f0b71461082c57005b80638a35ace3146107af5780638da5cb5b146107cf5780638efc0c46146107e457005b80637ab9ffc91161016a5780637ab9ffc9146106f75780637f77f574146107175780638456cb591461079a57005b8063715018a6146106ad578063730b4a89146106c257806379ba5097146106e257005b80632e17b05b116102505780634f558e79116101ff57806355f804b3116101dc57806355f804b3146106215780635924b71b146106415780635c975abb146106615780636c0360eb1461069857005b80634f558e79146105aa57806352d1902d146105f857806354fd4d501461060d57005b80634ce7957c1161022d5780634ce7957c146105325780634e1273f41461056a5780634f1ef2861461059757005b80632e17b05b146104ea5780632eb2c2d6146104ff5780633246b76c1461051f57005b806318160ddd116102ac5780632562b0c7116102895780632562b0c71461045e5780632a55205a1461047e5780632d61f8eb146104bd57005b806318160ddd146103ea5780631e7663bc1461041e578063227203181461043e57005b80630b12d136116102da5780630b12d1361461038a5780630e89341c146103aa578063162094c4146103ca57005b8062fdd58e1461030557806301ffc9a71461033857806306fdde031461036857005b3661030357005b005b34801561031157600080fd5b50610325610320366004613993565b610a62565b6040519081526020015b60405180910390f35b34801561034457600080fd5b506103586103533660046139ed565b610aab565b604051901515815260200161032f565b34801561037457600080fd5b5061037d610b4d565b60405161032f9190613a5a565b34801561039657600080fd5b5061037d6103a5366004613a6d565b610bdb565b3480156103b657600080fd5b5061037d6103c5366004613a6d565b610c7d565b3480156103d657600080fd5b506103036103e5366004613bb1565b610cbe565b3480156103f657600080fd5b507f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154610325565b34801561042a57600080fd5b50610325610439366004613c41565b610e7c565b34801561044a57600080fd5b50610358610459366004613a6d565b610ea7565b34801561046a57600080fd5b50610303610479366004613c83565b610f49565b34801561048a57600080fd5b5061049e610499366004613cef565b611232565b604080516001600160a01b03909316835260208301919091520161032f565b3480156104c957600080fd5b506104dd6104d8366004613c41565b611293565b60405161032f9190613d11565b3480156104f657600080fd5b5061037d61139a565b34801561050b57600080fd5b5061030361051a366004613e41565b6113a7565b61030361052d366004613eef565b6114e3565b34801561053e57600080fd5b50603d54610552906001600160a01b031681565b6040516001600160a01b03909116815260200161032f565b34801561057657600080fd5b5061058a610585366004613fb2565b611768565b60405161032f91906140a6565b6103036105a53660046140b9565b61184e565b3480156105b657600080fd5b506103586105c5366004613a6d565b60009081527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e28006020526040902054151590565b34801561060457600080fd5b5061032561186d565b34801561061957600080fd5b506001610325565b34801561062d57600080fd5b5061030361063c3660046140f3565b61189c565b34801561064d57600080fd5b50603454610552906001600160a01b031681565b34801561066d57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610358565b3480156106a457600080fd5b5061037d6118b0565b3480156106b957600080fd5b506103036118bd565b3480156106ce57600080fd5b506103036106dd366004614149565b6118d1565b3480156106ee57600080fd5b50610303611a7d565b34801561070357600080fd5b50603354610552906001600160a01b031681565b34801561072357600080fd5b5061076e610732366004613a6d565b60006020819052908152604090205463ffffffff808216916401000000008104909116906801000000000000000090046001600160a01b031683565b6040805163ffffffff94851681529390921660208401526001600160a01b03169082015260600161032f565b3480156107a657600080fd5b50610303611ade565b3480156107bb57600080fd5b506103256107ca366004613a6d565b611aee565b3480156107db57600080fd5b50610552611b8f565b6103256107f23660046141d7565b611bc4565b34801561080357600080fd5b5061037d611d88565b34801561081857600080fd5b5061030361082736600461423f565b611d95565b34801561083857600080fd5b50610325603f5481565b34801561084e57600080fd5b5061037d61085d366004614278565b611da0565b34801561086e57600080fd5b5061037d6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156108b757600080fd5b506108cb6108c6366004613a6d565b611e57565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160a01b03169082015260600161032f565b34801561090d57600080fd5b5061032561091c366004613a6d565b60009081527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604090205490565b34801561095957600080fd5b5061037d611f3e565b34801561096e57600080fd5b506033546001600160a01b0316610552565b34801561098c57600080fd5b50610552611f4b565b610303611f74565b3480156109a957600080fd5b506103586109b836600461429d565b6001600160a01b0391821660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b348015610a1157600080fd5b50610303610a203660046142cb565b612108565b348015610a3157600080fd5b50610303610a40366004614334565b612211565b6103036122ae565b348015610a5957600080fd5b50610303612409565b60008181527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602090815260408083206001600160a01b03861684529091529020545b92915050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161480610b3e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1617086b00000000000000000000000000000000000000000000000000000000145b80610aa55750610aa582612419565b60368054610b5a90614351565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8690614351565b8015610bd35780601f10610ba857610100808354040283529160200191610bd3565b820191906000526020600020905b815481529060010190602001808311610bb657829003601f168201915b505050505081565b6000818152603a60205260409020805460609190610bf890614351565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2490614351565b8015610c715780601f10610c4657610100808354040283529160200191610c71565b820191906000526020600020905b815481529060010190602001808311610c5457829003601f168201915b50505050509050919050565b6060603e603a6000848152602001908152602001600020600101604051602001610ca8929190614417565b6040516020818303038152906040529050919050565b6000828152603960205260408120805484929190610cdb90614351565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0790614351565b8015610d545780601f10610d2957610100808354040283529160200191610d54565b820191906000526020600020905b815481529060010190602001808311610d3757829003601f168201915b50506033546040517f0d9e9daf0000000000000000000000000000000000000000000000000000000081529495506000946001600160a01b039091169350630d9e9daf9250610da891508590600401613a5a565b61014060405180830381865afa158015610dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dea9190614442565b604001519050336001600160a01b03821614801590610e225750610e0c611b8f565b6001600160a01b0316336001600160a01b031614155b15610e59576040517f5336652700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000858152603a60205260409020600101610e748582614529565b505050505050565b600060388383604051610e90929190614625565b908152602001604051809103902054905092915050565b60335460008281526039602052604080822090517f0d9e9daf00000000000000000000000000000000000000000000000000000000815291926001600160a01b031691630d9e9daf91610efc91600401614635565b61014060405180830381865afa158015610f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3e9190614442565b610120015192915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610f945750825b905060008267ffffffffffffffff166001148015610fb15750303b155b905081158015610fbf575080155b15610ff6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156110575784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b611060336124fc565b61106861250d565b61107061251d565b600160355560408051808201909152601881527f68747470733a2f2f7777772e617277656176652e6e65742f00000000000000006020820152603e906110b69082614529565b50603f8990556110c58961252d565b6040516020016110d591906146c5565b604051602081830303815290604052603690816110f29190614529565b506110fc8961252d565b60405160200161110c919061470a565b604051602081830303815290604052603790816111299190614529565b5060338054337fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556034805482166001600160a01b038a811691909117909155603d8054909216908a1617905560416111888782614529565b507fe4a79606e0b7edc58b0d6597231040e470837999f80edb9f832806e1439acfad898989896040516111be949392919061474f565b60405180910390a183156112275784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b600080600061124085611e57565b90507f000000000000000000000000000000000000000000000000000000000000000084826020015163ffffffff1661127991906147ba565b61128391906147d1565b6040909101519590945092505050565b61130660405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b6033546040517f0d9e9daf0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690630d9e9daf906113519086908690600401614837565b61014060405180830381865afa15801561136f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113939190614442565b9392505050565b60408054610b5a90614351565b60005b8351811015611427576001600160a01b038616158015906113e857506113e88482815181106113db576113db61484b565b6020026020010151610ea7565b1561141f576040517fc8fb086200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001016113aa565b50336001600160a01b038616811480159061148757506001600160a01b0380871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b156114d6576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b038083166004830152871660248201526044015b60405180910390fd5b610e748686868686612571565b6114eb612604565b6033546001600160a01b0316331461152f576040517f04117f5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060388a8a604051611543929190614625565b90815260200160405180910390205490508060000361158e576040517f4ea0703b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61159c888287868689612660565b6033546040517f0d9e9daf0000000000000000000000000000000000000000000000000000000081526000916001600160a01b031690630d9e9daf906115e8908e908e90600401614837565b61014060405180830381865afa158015611606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162a9190614442565b602001519050600089828a8a60405160200161166f94939291906001600160a01b03948516815292841660208401529083166040830152909116606082015260800190565b60408051601f19818403018152919052603454603f549192506001600160a01b03169063a2838fee9034908f908f908c6116a88a611aee565b886040518863ffffffff1660e01b81526004016116ca9695949392919061487a565b6000604051808303818588803b1580156116e357600080fd5b505af11580156116f7573d6000803e3d6000fd5b5050604080516001600160a01b038d81168252602082018990529181018c9052606081018b9052818e1694508682169350908e1691507ffac5663255378c896e3ce87766fd54d1d41205eeccb6bcca7856f3b777c25e819060800160405180910390a4505050505050505050505050565b606081518351146117b257815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016114cd565b6000835167ffffffffffffffff8111156117ce576117ce613a86565b6040519080825280602002602001820160405280156117f7578160200160208202803683370190505b50905060005b84518110156118465760208082028601015161182190602080840287010151610a62565b8282815181106118335761183361484b565b60209081029190910101526001016117fd565b509392505050565b6118566126e6565b61185f826127b6565b61186982826127be565b5050565b60006118776128c4565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6118a4612926565b603e6118698282614529565b603e8054610b5a90614351565b6118c5612926565b6118cf6000612971565b565b60008281526039602052604081208054849291906118ee90614351565b80601f016020809104026020016040519081016040528092919081815260200182805461191a90614351565b80156119675780601f1061193c57610100808354040283529160200191611967565b820191906000526020600020905b81548152906001019060200180831161194a57829003601f168201915b50506033546040517f0d9e9daf0000000000000000000000000000000000000000000000000000000081529495506000946001600160a01b039091169350630d9e9daf92506119bb91508590600401613a5a565b61014060405180830381865afa1580156119d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fd9190614442565b604001519050336001600160a01b03821614801590611a355750611a1f611b8f565b6001600160a01b0316336001600160a01b031614155b15611a6c576040517f5336652700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a7685856129c1565b5050505050565b3380611a87611f4b565b6001600160a01b031614611ad2576040517f118cdaa70000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016114cd565b611adb81612971565b50565b611ae6612926565b6118cf612b18565b60335460008281526039602052604080822090517f0d9e9daf00000000000000000000000000000000000000000000000000000000815291926001600160a01b031691630d9e9daf91611b4391600401614635565b61014060405180830381865afa158015611b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b859190614442565b6080015192915050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6033546000906001600160a01b03163314611c0b576040517f04117f5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c13612604565b60408051808201825284815260208082018590526035546000908152603a9091529190912081518190611c469082614529565b5060208201516001820190611c5b9082614529565b50905050603554603884604051611c7291906148bf565b9081526040805160209281900383019020929092556035546000908152603990915220611c9f8482614529565b507fe8d11346c55ec710d7fc80e67256850e12a4b81639cc2b24bcaaf6bdf45a42408360355484604051611cd5939291906148db565b60405180910390a16035805460018101909155603354604080517fff6474a200000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ff6474a29160048083019260209291908290030181865afa158015611d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6f9190614906565b603d54909150611846906001600160a01b031682612b8d565b60378054610b5a90614351565b611869338383612ba9565b6000828152603c602090815260408083206001600160a01b03851684529091529020805460609190611dd190614351565b80601f0160208091040260200160405190810160405280929190818152602001828054611dfd90614351565b8015611e4a5780601f10611e1f57610100808354040283529160200191611e4a565b820191906000526020600020905b815481529060010190602001808311611e2d57829003601f168201915b5050505050905092915050565b60408051606081018252600080825260208201819052918101919091526000828152602081905260409020546801000000000000000090046001600160a01b031615611ef25750600090815260208181526040918290208251606081018452905463ffffffff808216835264010000000082041692820192909252680100000000000000009091046001600160a01b03169181019190915290565b505060408051606081018252600081526101f460208201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169181019190915290565b60418054610b5a90614351565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00611bb4565b6000808080808080611f89366004818461491f565b810190611f969190614954565b96509650965096509650965096506000611faf85610bdb565b90506000611fc56033546001600160a01b031690565b90506000816001600160a01b03166338db5920846040518263ffffffff1660e01b8152600401611ff59190613a5a565b600060405180830381865afa158015612012573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261203a9190810190614a50565b905060008a898360000151866040516020016120599493929190614b21565b60408051601f198184030181526060830182528a8352602083018a905282820188905290517fb8dbe8190000000000000000000000000000000000000000000000000000000081529092506001600160a01b0385169163b8dbe8199134916120c9918f9187918d90600401614b7e565b6000604051808303818588803b1580156120e257600080fd5b505af11580156120f6573d6000803e3d6000fd5b50505050505050505050505050505050565b6001600160a01b03851615801590612124575061212483610ea7565b1561215b576040517fc8fb086200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b03861681148015906121ba57506001600160a01b0380871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b15612204576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b038083166004830152871660248201526044016114cd565b610e748686868686612c7d565b612219612926565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081178255612275611b8f565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b60008080808080808080806122c6366004818461491f565b8101906122d39190614bf3565b995099509950995099509950995099509950995060006122f286610bdb565b905060006123086033546001600160a01b031690565b9050600085898c8c868860405160200161232796959493929190614ca4565b604051602081830303815290604052905060008d8d604051602001612356929190918252602082015260400190565b60408051601f198184030181526060830182528b8352602083018b905282820189905290517fa736244e0000000000000000000000000000000000000000000000000000000081529092506001600160a01b0385169063a736244e9034906123c690869088908790600401614cf1565b6000604051808303818588803b1580156123df57600080fd5b505af11580156123f3573d6000803e3d6000fd5b5050505050505050505050505050505050505050565b612411612926565b6118cf612d3e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a260000000000000000000000000000000000000000000000000000000014806124ac57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b80610aa557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610aa5565b612504612d96565b611adb81612dfd565b612515612d96565b6118cf612e48565b612525612d96565b6118cf612e7b565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a900480612548575050819003601f19909101908152919050565b6001600160a01b0384166125b4576040517f57f447ce000000000000000000000000000000000000000000000000000000008152600060048201526024016114cd565b6001600160a01b0385166125f7576040517f01a83514000000000000000000000000000000000000000000000000000000008152600060048201526024016114cd565b611a768585858585612ea9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156118cf576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000858152603b602090815260408083206001600160a01b038a16808552908352818420859055888452603c835281842090845290915290206126a4838583614d2a565b50610e748686866040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250612efc565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061277f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127737f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156118cf576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611adb612926565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612818575060408051601f3d908101601f1916820190925261281591810190614906565b60015b612859576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016114cd565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146128b5576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016114cd565b6128bf8383612f72565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118cf576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3361292f611b8f565b6001600160a01b0316146118cf576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114cd565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815561186982612fc8565b805163ffffffff16156129d357600081525b60408101516001600160a01b03161580156129f857506000816020015163ffffffff16115b15612a2f576040517f0d9b92f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526020818152604091829020835181548584018051878701805163ffffffff9586167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909516851764010000000093871693909302929092177fffffffff0000000000000000000000000000000000000000ffffffffffffffff16680100000000000000006001600160a01b039384160217909555865192835290519092169381019390935290511691810191909152339083907f5837d55897cfc337f160a71d7b63a047abd50a3a8834f1c5d70f338846358c6d9060600160405180910390a35050565b612b20612604565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b60003860003884865af16118695763b12d13eb6000526004601cfd5b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006001600160a01b038316612c0d576040517fced3e100000000000000000000000000000000000000000000000000000000008152600060048201526024016114cd565b6001600160a01b038481166000818152600184016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b6001600160a01b038416612cc0576040517f57f447ce000000000000000000000000000000000000000000000000000000008152600060048201526024016114cd565b6001600160a01b038516612d03576040517f01a83514000000000000000000000000000000000000000000000000000000008152600060048201526024016114cd565b60408051600180825260208201869052818301908152606082018590526080820190925290612d358787848487612ea9565b50505050505050565b612d46613051565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612b6f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166118cf576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e05612d96565b6001600160a01b038116611ad2576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016114cd565b612e50612d96565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b612e83612d96565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b612eb5858585856130ac565b6001600160a01b03841615611a765782513390600103612eee5760208481015190840151612ee783898985858961321c565b5050610e74565b610e748187878787876133bc565b6001600160a01b038416612f3f576040517f57f447ce000000000000000000000000000000000000000000000000000000008152600060048201526024016114cd565b60408051600180825260208201869052818301908152606082018590526080820190925290610e74600087848487612ea9565b612f7b82613508565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612fc0576128bf82826135b0565b611869613626565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166118cf576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e28006130d98585858561365e565b6001600160a01b038516613187576000805b845181101561316b5760008482815181106131085761310861484b565b602002602001015190508084600001600088858151811061312b5761312b61484b565b6020026020010151815260200190815260200160002060008282546131509190614e26565b9091555061316090508184614e26565b9250506001016130eb565b50808260010160008282546131809190614e26565b9091555050505b6001600160a01b038416611a76576000805b84518110156132085760008482815181106131b6576131b661484b565b60200260200101519050808460000160008885815181106131d9576131d961484b565b602090810291909101810151825281019190915260400160002080549190910390559190910190600101613199565b506001820180549190910390555050505050565b6001600160a01b0384163b15610e74576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e61906132799089908990889088908890600401614e39565b6020604051808303816000875af19250505080156132b4575060408051601f3d908101601f191682019092526132b191810190614e7c565b60015b613336573d8080156132e2576040519150601f19603f3d011682016040523d82523d6000602084013e6132e7565b606091505b50805160000361332e576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024016114cd565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014612d35576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024016114cd565b6001600160a01b0384163b15610e74576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c81906134199089908990889088908890600401614e99565b6020604051808303816000875af1925050508015613454575060408051601f3d908101601f1916820190925261345191810190614e7c565b60015b613482573d8080156132e2576040519150601f19603f3d011682016040523d82523d6000602084013e6132e7565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014612d35576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024016114cd565b806001600160a01b03163b600003613557576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016114cd565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516135cd91906148bf565b600060405180830381855af49150503d8060008114613608576040519150601f19603f3d011682016040523d82523d6000602084013e61360d565b606091505b509150915061361d8583836138c7565b95945050505050565b34156118cf576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805182517f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450091146136c857825182516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016114cd565b3360005b84518110156137e7576020818102868101820151908601909101516001600160a01b03891615613798576000828152602086815260408083206001600160a01b038d16845290915290205481811015613771576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038b1660048201526024810182905260448101839052606481018490526084016114cd565b6000838152602087815260408083206001600160a01b038e16845290915290209082900390555b6001600160a01b038816156137dd576000828152602086815260408083206001600160a01b038c168452909152812080548392906137d7908490614e26565b90915550505b50506001016136cc565b5083516001036138685760208401516000906020850151909150866001600160a01b0316886001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051613859929190918252602082015260400190565b60405180910390a45050610e74565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516138b7929190614ef7565b60405180910390a4505050505050565b6060826138dc576138d78261393c565b611393565b81511580156138f357506001600160a01b0384163b155b15613935576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114cd565b5092915050565b80511561394c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381168114611adb57600080fd5b600080604083850312156139a657600080fd5b82356139b18161397e565b946020939093013593505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611adb57600080fd5b6000602082840312156139ff57600080fd5b8135611393816139bf565b60005b83811015613a25578181015183820152602001613a0d565b50506000910152565b60008151808452613a46816020860160208601613a0a565b601f01601f19169290920160200192915050565b6020815260006113936020830184613a2e565b600060208284031215613a7f57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715613ad957613ad9613a86565b60405290565b6040516080810167ffffffffffffffff81118282101715613ad957613ad9613a86565b604051601f8201601f1916810167ffffffffffffffff81118282101715613b2b57613b2b613a86565b604052919050565b600067ffffffffffffffff821115613b4d57613b4d613a86565b50601f01601f191660200190565b600082601f830112613b6c57600080fd5b8135613b7f613b7a82613b33565b613b02565b818152846020838601011115613b9457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215613bc457600080fd5b82359150602083013567ffffffffffffffff811115613be257600080fd5b613bee85828601613b5b565b9150509250929050565b60008083601f840112613c0a57600080fd5b50813567ffffffffffffffff811115613c2257600080fd5b602083019150836020828501011115613c3a57600080fd5b9250929050565b60008060208385031215613c5457600080fd5b823567ffffffffffffffff811115613c6b57600080fd5b613c7785828601613bf8565b90969095509350505050565b60008060008060808587031215613c9957600080fd5b843593506020850135613cab8161397e565b92506040850135613cbb8161397e565b9150606085013567ffffffffffffffff811115613cd757600080fd5b613ce387828801613b5b565b91505092959194509250565b60008060408385031215613d0257600080fd5b50508035926020909101359150565b81516001600160a01b0316815261014081016020830151613d3d60208401826001600160a01b03169052565b506040830151613d5860408401826001600160a01b03169052565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151613dab8285018215159052565b505092915050565b600067ffffffffffffffff821115613dcd57613dcd613a86565b5060051b60200190565b600082601f830112613de857600080fd5b81356020613df8613b7a83613db3565b8083825260208201915060208460051b870101935086841115613e1a57600080fd5b602086015b84811015613e365780358352918301918301613e1f565b509695505050505050565b600080600080600060a08688031215613e5957600080fd5b8535613e648161397e565b94506020860135613e748161397e565b9350604086013567ffffffffffffffff80821115613e9157600080fd5b613e9d89838a01613dd7565b94506060880135915080821115613eb357600080fd5b613ebf89838a01613dd7565b93506080880135915080821115613ed557600080fd5b50613ee288828901613b5b565b9150509295509295909350565b600080600080600080600080600060e08a8c031215613f0d57600080fd5b893567ffffffffffffffff80821115613f2557600080fd5b613f318d838e01613bf8565b909b50995060208c01359150613f468261397e565b90975060408b013590613f588261397e565b90965060608b013590613f6a8261397e565b90955060808b0135945060a08b0135935060c08b01359080821115613f8e57600080fd5b50613f9b8c828d01613bf8565b915080935050809150509295985092959850929598565b60008060408385031215613fc557600080fd5b823567ffffffffffffffff80821115613fdd57600080fd5b818501915085601f830112613ff157600080fd5b81356020614001613b7a83613db3565b82815260059290921b8401810191818101908984111561402057600080fd5b948201945b838610156140475785356140388161397e565b82529482019490820190614025565b9650508601359250508082111561405d57600080fd5b50613bee85828601613dd7565b60008151808452602080850194506020840160005b8381101561409b5781518752958201959082019060010161407f565b509495945050505050565b602081526000611393602083018461406a565b600080604083850312156140cc57600080fd5b82356140d78161397e565b9150602083013567ffffffffffffffff811115613be257600080fd5b60006020828403121561410557600080fd5b813567ffffffffffffffff81111561411c57600080fd5b61412884828501613b5b565b949350505050565b803563ffffffff8116811461414457600080fd5b919050565b600080828403608081121561415d57600080fd5b833592506060601f198201121561417357600080fd5b506040516060810181811067ffffffffffffffff8211171561419757614197613a86565b6040526141a660208501614130565b81526141b460408501614130565b602082015260608401356141c78161397e565b6040820152919491935090915050565b600080604083850312156141ea57600080fd5b823567ffffffffffffffff8082111561420257600080fd5b61420e86838701613b5b565b9350602085013591508082111561422457600080fd5b50613bee85828601613b5b565b8015158114611adb57600080fd5b6000806040838503121561425257600080fd5b823561425d8161397e565b9150602083013561426d81614231565b809150509250929050565b6000806040838503121561428b57600080fd5b82359150602083013561426d8161397e565b600080604083850312156142b057600080fd5b82356142bb8161397e565b9150602083013561426d8161397e565b600080600080600060a086880312156142e357600080fd5b85356142ee8161397e565b945060208601356142fe8161397e565b93506040860135925060608601359150608086013567ffffffffffffffff81111561432857600080fd5b613ee288828901613b5b565b60006020828403121561434657600080fd5b81356113938161397e565b600181811c9082168061436557607f821691505b60208210810361439e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600081546143b181614351565b600182811680156143c957600181146143de5761440d565b60ff198416875282151583028701945061440d565b8560005260208060002060005b858110156144045781548a8201529084019082016143eb565b50505082870194505b5050505092915050565b600061412861442683866143a4565b846143a4565b80516141448161397e565b805161414481614231565b6000610140828403121561445557600080fd5b61445d613ab5565b6144668361442c565b81526144746020840161442c565b60208201526144856040840161442c565b6040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152506101206144d6818501614437565b908201529392505050565b601f8211156128bf576000816000526020600020601f850160051c8101602086101561450a5750805b601f850160051c820191505b81811015610e7457828155600101614516565b815167ffffffffffffffff81111561454357614543613a86565b614557816145518454614351565b846144e1565b602080601f8311600181146145aa57600084156145745750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610e74565b600085815260208120601f198616915b828110156145d9578886015182559484019460019091019084016145ba565b508582101561461557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b8183823760009101908152919050565b600060208083526000845461464981614351565b806020870152604060018084166000811461466b5760018114614687576146b7565b60ff19851660408a0152604084151560051b8a010195506146b7565b89600052602060002060005b858110156146ae5781548b8201860152908301908801614693565b8a016040019650505b509398975050505050505050565b7f50686920437265642d00000000000000000000000000000000000000000000008152600082516146fd816009850160208701613a0a565b9190910160090192915050565b7f5048492d00000000000000000000000000000000000000000000000000000000815260008251614742816004850160208701613a0a565b9190910160040192915050565b84815260006001600160a01b038086166020840152808516604084015250608060608301526147816080830184613a2e565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610aa557610aa561478b565b600082614807577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60208152600061412860208301848661480c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60a08152600061488e60a08301888a61480c565b86602084015285604084015284606084015282810360808401526148b28185613a2e565b9998505050505050505050565b600082516148d1818460208701613a0a565b9190910192915050565b6060815260006148ee6060830186613a2e565b84602084015282810360408401526147818185613a2e565b60006020828403121561491857600080fd5b5051919050565b6000808585111561492f57600080fd5b8386111561493c57600080fd5b5050820193919092039150565b80356141448161397e565b600080600080600080600060e0888a03121561496f57600080fd5b873561497a8161397e565b965060208881013567ffffffffffffffff8082111561499857600080fd5b818b0191508b601f8301126149ac57600080fd5b81356149ba613b7a82613db3565b81815260059190911b8301840190848101908e8311156149d957600080fd5b938501935b828510156149f7578435825293850193908501906149de565b9a50614a0891505060408c01614949565b975060608b0135965060808b0135955060a08b0135945060c08b0135925080831115614a3357600080fd5b5050614a418a828b01613b5b565b91505092959891949750929550565b60006020808385031215614a6357600080fd5b825167ffffffffffffffff80821115614a7b57600080fd5b9084019060808287031215614a8f57600080fd5b614a97613adf565b8251614aa28161397e565b81528284015182811115614ab557600080fd5b83019150601f82018713614ac857600080fd5b8151614ad6613b7a82613b33565b8181528886838601011115614aea57600080fd5b614af982878301888701613a0a565b8086840152505060408301516040820152606083015160608201528094505050505092915050565b60006001600160a01b0380871683528086166020840152808516604084015250608060608301526147816080830184613a2e565b805182526020810151602083015260006040820151606060408501526141286060850182613a2e565b6080808252855190820181905260009060209060a0840190828901845b82811015614bb757815184529284019290840190600101614b9b565b5050508381036020850152614bcc8188613a2e565b9150508281036040840152614be18186614b55565b91505082606083015295945050505050565b6000806000806000806000806000806101408b8d031215614c1357600080fd5b8a35995060208b0135985060408b0135614c2c8161397e565b975060608b0135614c3c8161397e565b965060808b0135614c4c8161397e565b955060a08b0135945060c08b0135935060e08b013592506101008b013567ffffffffffffffff811115614c7e57600080fd5b614c8a8d828e01613b5b565b9250506101208b013590509295989b9194979a5092959850565b86815260006001600160a01b038088166020840152808716604084015280861660608401525060c06080830152614cde60c0830185613a2e565b90508260a0830152979650505050505050565b606081526000614d046060830186613a2e565b8281036020840152614d168186613a2e565b905082810360408401526147818185614b55565b67ffffffffffffffff831115614d4257614d42613a86565b614d5683614d508354614351565b836144e1565b6000601f841160018114614da85760008515614d725750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611a76565b600083815260209020601f19861690835b82811015614dd95786850135825560209485019460019092019101614db9565b5086821015614e14577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b80820180821115610aa557610aa561478b565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152614e7160a0830184613a2e565b979650505050505050565b600060208284031215614e8e57600080fd5b8151611393816139bf565b60006001600160a01b03808816835280871660208401525060a06040830152614ec560a083018661406a565b8281036060840152614ed7818661406a565b90508281036080840152614eeb8185613a2e565b98975050505050505050565b604081526000614f0a604083018561406a565b828103602084015261361d818561406a56fea164736f6c6343000819000a