0 txs
0 calls
constructor
No constructor.
functions
_bytes32ToString
purefunction _bytes32ToString(bytes32 _bytes32) pure returns (string)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
checkAccess
viewfunction checkAccess(address account, address target, bytes4 selector) view
functionRoles
viewfunction functionRoles(bytes32) view returns (uint256)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getFunctionId
purefunction getFunctionId(address target, bytes4 selector) pure returns (bytes32)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
name
viewfunction name() view returns (string)
nextRole
viewfunction nextRole() view returns (uint256)
nextTokenId
viewfunction nextTokenId() view returns (uint256)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
roleGranted
viewfunction roleGranted(address account, uint8 roleId) view returns (bool)
roles
viewfunction roles(uint256) view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenByIndex
viewfunction tokenByIndex(uint256 index) view returns (uint256)
tokenNonTransferable
viewfunction tokenNonTransferable(uint256) view returns (bool)
tokenOfOwnerByIndex
viewfunction tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)
tokenRoles
viewfunction tokenRoles(uint256) view returns (uint8)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
userRoles
viewfunction userRoles(address) view returns (uint256)
addRole
nonpayablefunction addRole(string roleName)
approve
nonpayablefunction approve(address to, uint256 tokenId)
bindRole
nonpayablefunction bindRole(tuple roleData)
bindRoles
nonpayablefunction bindRoles(tuple[] rolesData)
burn
nonpayablefunction burn(uint256 tokenId)
changeBatchTokenTransferability
nonpayablefunction changeBatchTokenTransferability(tuple[] tokens)
changeTokenTransferability
nonpayablefunction changeTokenTransferability(uint256 tokenId, bool isNonTransferable)
grantRole
nonpayablefunction grantRole(address account, uint8 roleId) returns (uint256 _nextTokenId)
grantRoleTransferable
nonpayablefunction grantRoleTransferable(address account, uint8 roleId, bool isNonTransferable)
initialize
nonpayablefunction initialize(string name_, string symbol_)
renameRole
nonpayablefunction renameRole(uint8 roleId, string roleName)
renounceOwnership
nonpayablefunction renounceOwnership()
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unbindRole
nonpayablefunction unbindRole(tuple roleData)
events
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RoleAdded
event RoleAdded(bytes32 indexed role, uint256 indexed roleId)
RoleBound
event RoleBound(bytes32 indexed funcId, uint8 indexed roleId)
RoleGranted
event RoleGranted(address indexed user, uint8 indexed roleId)
RoleRenamed
event RoleRenamed(bytes32 indexed role, uint8 indexed roleId)
RoleRevoked
event RoleRevoked(address indexed user, uint8 indexed roleId)
RoleUnbound
event RoleUnbound(bytes32 indexed funcId, uint8 indexed roleId)
TokenTransferabilityChanged
event TokenTransferabilityChanged(uint256 tokenId, bool isNonTransferable)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
errors
AccessNotGranted
error AccessNotGranted()
ERC721EnumerableForbiddenBatchMint
error ERC721EnumerableForbiddenBatchMint()
ERC721IncorrectOwner
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner)
ERC721InsufficientApproval
error ERC721InsufficientApproval(address operator, uint256 tokenId)
ERC721InvalidApprover
error ERC721InvalidApprover(address approver)
ERC721InvalidOperator
error ERC721InvalidOperator(address operator)
ERC721InvalidOwner
error ERC721InvalidOwner(address owner)
ERC721InvalidReceiver
error ERC721InvalidReceiver(address receiver)
ERC721InvalidSender
error ERC721InvalidSender(address sender)
ERC721NonexistentToken
error ERC721NonexistentToken(uint256 tokenId)
ERC721OutOfBoundsIndex
error ERC721OutOfBoundsIndex(address owner, uint256 index)
InvalidInitialization
error InvalidInitialization()
MaxRolesReached
error MaxRolesReached()
NoChanges
error NoChanges()
NotInitializing
error NotInitializing()
NotTokenOwner
error NotTokenOwner()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
RoleAlreadyGranted
error RoleAlreadyGranted()
TokenNonTransferable
error TokenNonTransferable()
TooBigRoleName
error TooBigRoleName()
creation bytecode
0x6080604052348015600f57600080fd5b506130b98061001f6000396000f3fe608060405234801561001057600080fd5b50600436106101e35760003560e01c806301ffc9a7146101e857806306fdde0314610210578063081812fc14610225578063095ea7b3146102455780630d2daf781461025a57806311a1e8071461026d57806318160ddd1461028e57806323b872dd146102965780632451ea78146102a95780632f745c59146102bc578063341b11b0146102cf578063379978eb146102ef5780633e840236146102f85780633e96e8681461030b57806342842e0e1461031e57806342966c68146103315780634cd88b76146103445780634f6ccce71461035757806351f8510f1461036a5780636352211e1461038d5780636396eb8d146103a057806370a08231146103b3578063715018a6146103c657806374d5e100146103ce57806375794a3c146103ee5780638d10bcc4146103f75780638da5cb5b1461040a57806395d89b4114610412578063a22cb4651461041a578063ad966a031461042d578063b88d4fde14610440578063bfda4a4914610453578063c4ef7d9514610473578063c87b56dd14610486578063ca9599ef14610499578063e7e50673146104ac578063e985e9c5146104e1578063e9d30b07146104f4578063f2fde38b14610507578063fabf12e01461051a578063febe2a591461052d575b600080fd5b6101fb6101f636600461216e565b610540565b60405190151581526020015b60405180910390f35b61021861056b565b60405161020791906121db565b6102386102333660046121ee565b61060c565b6040516102079190612207565b610258610253366004612237565b610621565b005b610258610268366004612271565b610630565b61028061027b36600461229d565b610657565b604051908152602001610207565b61028061069a565b6102586102a43660046122d4565b6106af565b6102586102b7366004612311565b610743565b6102806102ca366004612237565b610803565b6102806102dd3660046121ee565b60046020526000908152604090205481565b61028060005481565b61028061030636600461233d565b610865565b6102586103193660046123af565b6108aa565b61025861032c3660046122d4565b610937565b61025861033f3660046121ee565b610957565b61025861035236600461249e565b6109aa565b6102806103653660046121ee565b610aae565b6101fb6103783660046121ee565b60066020526000908152604090205460ff1681565b61023861039b3660046121ee565b610b0f565b6102586103ae366004612505565b610b1a565b6102806103c136600461254c565b610b71565b610258610bc9565b6102806103dc36600461254c565b60056020526000908152604090205481565b61028060015481565b610258610405366004612567565b610bdd565b610238610c19565b610218610c34565b6102586104283660046125dc565b610c51565b61021861043b3660046121ee565b610c5c565b61025861044e366004612606565b610d8e565b6102806104613660046121ee565b60026020526000908152604090205481565b6101fb61048136600461233d565b610da6565b6102186104943660046121ee565b610dd0565b6102586104a7366004612311565b611048565b6104cf6104ba3660046121ee565b60036020526000908152604090205460ff1681565b60405160ff9091168152602001610207565b6101fb6104ef366004612681565b611059565b6102586105023660046126ab565b611098565b61025861051536600461254c565b6110ce565b6102586105283660046126ee565b611109565b61025861053b366004612740565b611164565b60006001600160e01b0319821663780e9d6360e01b14806105655750610565826111af565b92915050565b606060006105776111ff565b9050806000018054610588906127a5565b80601f01602080910402602001604051908101604052809291908181526020018280546105b4906127a5565b80156106015780601f106105d657610100808354040283529160200191610601565b820191906000526020600020905b8154815290600101906020018083116105e457829003601f168201915b505050505091505090565b600061061782611223565b506105658261125b565b61062c828233611284565b5050565b610638611291565b61062c60405180604001604052808481526020018315158152506112c3565b6040516001600160601b0319606084901b16602082015260009060e083901c90603401604051602081830303815290604052610692906127df565b179392505050565b6000806106a561136b565b6002015492915050565b6001600160a01b0382166106e2576000604051633250574960e11b81526004016106d99190612207565b60405180910390fd5b60006106ef83833361138f565b9050836001600160a01b0316816001600160a01b03161461073d576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016106d9565b50505050565b61074b611291565b600061076d61075d602084018461254c565b61027b604085016020860161216e565b600081815260046020526040808220549293506107909060608601908601612803565b60ff166001901b19821690508082036107a95750505050565b600083815260046020526040908190208290556107cc9060608601908601612803565b60ff16837f91a6999f7e098c5bfabcd97122a0b8e330021a51b4626497b183735e6181d38b60405160405180910390a35050505b50565b60008061080e61136b565b905061081984610b71565b831061083c57838360405163295f44f760e21b81526004016106d992919061281e565b6001600160a01b0384166000908152602091825260408082208583529092522054905092915050565b600061086f611291565b6001805490600061087f8361284d565b909155506000818152600360205260409020805460ff191660ff851617905590506105658382611445565b6108b2611291565b60005460ff10156108d657604051636b898b9f60e01b815260040160405180910390fd5b60006108e283836114aa565b6000805481526002602052604081208290558054919250806109038361284d565b9091555060405182907fc1f851cd15bf53ac8a2d6138ccb878e04065251a1be6253ad567f11cc31d8c0790600090a3505050565b61095283838360405180602001604052806000815250610d8e565b505050565b33610960610c19565b6001600160a01b03161480610983575061098361097c82610b0f565b33836114d8565b15610991576108008161153e565b6040516359dc379f60e01b815260040160405180910390fd5b60006109b4611579565b805490915060ff600160401b82041615906001600160401b03166000811580156109db5750825b90506000826001600160401b031660011480156109f75750303b155b905081158015610a05575080155b15610a235760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b03191660011785558315610a4c57845460ff60401b1916600160401b1785555b610a553361159d565b610a5f87876115a5565b8315610aa557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b600080610ab961136b565b9050610ac361069a565b8310610ae75760008360405163295f44f760e21b81526004016106d992919061281e565b806002018381548110610afc57610afc612866565b9060005260206000200154915050919050565b600061056582611223565b6001600160a01b03831660009081526005602052604081205490600490610b418585610657565b81526020019081526020016000205416600003610952576040516334a791f560e11b815260040160405180910390fd5b600080610b7c6111ff565b90506001600160a01b038316610ba85760006040516322718ad960e21b81526004016106d99190612207565b6001600160a01b039092166000908152600390920160205250604090205490565b610bd1611291565b610bdb60006115b7565b565b610be5611291565b8060005b8181101561073d57610c11848483818110610c0657610c06612866565b905060600201611613565b600101610be9565b600080610c246116b9565b546001600160a01b031692915050565b60606000610c406111ff565b9050806001018054610588906127a5565b61062c3383836116dd565b606060005b60208160ff16108015610c955750828160ff1660208110610c8457610c84612866565b1a60f81b6001600160f81b03191615155b15610caa57610ca38161287c565b9050610c61565b60008160ff166001600160401b03811115610cc757610cc76123f0565b6040519080825280601f01601f191660200182016040528015610cf1576020820181803683370190505b509050600091505b60208260ff16108015610d2d5750838260ff1660208110610d1c57610d1c612866565b1a60f81b6001600160f81b03191615155b15610d8757838260ff1660208110610d4757610d47612866565b1a60f81b818360ff1681518110610d6057610d60612866565b60200101906001600160f81b031916908160001a905350610d808261287c565b9150610cf9565b9392505050565b610d998484846106af565b61073d3385858585611782565b6001600160a01b038216600090815260056020526040902054600160ff83161b9081161492915050565b6060610dda61212f565b610de38361189b565b604051602001610df391906128b7565b60408051808303601f1901815291815290825260008481526003602052205460ff16610e1e8161189b565b604051602001610e2e9190612a80565b60408051808303601f1901815291815260208085019290925260ff831660009081526002909252902054610e6190610c5c565b604051602001610e719190612ae0565b60408051808303601f1901815291815283810191909152805160808101909152604980825261303b602083013960608301526000610eae85610b0f565b90506000805b610100811015610f6657610ec88382610da6565b15610f5157610eeb610edb82600a612b42565b610ee6906046612b59565b61189b565b610ef48361189b565b600084815260026020526040902054610f0c90610c5c565b604051602001610f1e93929190612b6c565b60408051601f1981840301815291905285610f3a836004612b59565b61011e8110610f4b57610f4b612866565b60200201525b81610f5b8161284d565b925050600101610eb4565b50606060005b61011e811015610fba5781868261011e8110610f8a57610f8a612866565b6020020151604051602001610fa0929190612c19565b60408051601f198184030181529190529150600101610f6c565b5080604051602001610fcc9190612c48565b60405160208183030381529060405290506000611019610feb8961189b565b610ff48461199b565b604051602001611005929190612c72565b60405160208183030381529060405261199b565b90508060405160200161102c9190612d7c565b60408051601f1981840301815291905298975050505050505050565b611050611291565b61080081611613565b6000806110646111ff565b6001600160a01b03948516600090815260059190910160209081526040808320959096168252939093525050205460ff1690565b6110a0611291565b80156109525761095260405180604001604052806110be8686610865565b81526020018315158152506112c3565b6110d6611291565b6001600160a01b038116611100576000604051631e4fbdf760e01b81526004016106d99190612207565b610800816115b7565b611111611291565b600061111d83836114aa565b60ff851660008181526002602052604080822084905551929350909183917f3f1d30f439b7255e48628c52053d036a7baa588ea0e1fd1e6892006a67df0e0591a350505050565b61116c611291565b60005b81811015610952576111a783838381811061118c5761118c612866565b9050604002018036038101906111a29190612dc1565b6112c3565b60010161116f565b60006001600160e01b031982166380ac58cd60e01b14806111e057506001600160e01b03198216635b5e139f60e01b145b8061056557506301ffc9a760e01b6001600160e01b0319831614610565565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930090565b60008061122f83611b04565b90506001600160a01b03811661056557604051637e27328960e01b8152600481018490526024016106d9565b6000806112666111ff565b6000938452600401602052505060409020546001600160a01b031690565b6109528383836001611b2d565b3361129a610c19565b6001600160a01b031614610bdb573360405163118cdaa760e01b81526004016106d99190612207565b60208082015182516000908152600690925260409091205490151560ff9091161515036113035760405163aabb9c6360e01b815260040160405180910390fd5b602081810180518351600090815260068452604090819020805460ff1916921515929092179091558351915181519283521515928201929092527f9b7298b1be4144736359950de08996bc4641643812c7d0df8acec87adfdf1c7a910160405180910390a150565b7f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed0090565b60008061139d858585611c37565b60008581526003602052604090205490915060ff166001600160a01b038616156114235760008581526006602052604090205460ff16156113f15760405163fcd0178f60e01b815260040160405180910390fd5b6113fb8682610da6565b1561141957604051632a043cc160e21b815260040160405180910390fd5b6114238682611cc5565b6001600160a01b0382161561143c5761143c8282611d1b565b50949350505050565b6001600160a01b03821661146f576000604051633250574960e11b81526004016106d99190612207565b600061147d8383600061138f565b90506001600160a01b038116156109525760006040516339e3563760e11b81526004016106d99190612207565b600060208211156114ce57604051631519d3d360e31b815260040160405180910390fd5b610d878284612e16565b60006001600160a01b038316158015906115365750826001600160a01b0316846001600160a01b0316148061151257506115128484611059565b806115365750826001600160a01b031661152b8361125b565b6001600160a01b0316145b949350505050565b600061154d600083600061138f565b90506001600160a01b03811661062c57604051637e27328960e01b8152600481018390526024016106d9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6110d6611d72565b6115ad611d72565b61062c8282611d97565b60006115c16116b9565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600061162561075d602084018461254c565b600081815260046020526040808220549293506116489060608601908601612803565b60ff166001901b821790508082036116605750505050565b600083815260046020526040908190208290556116839060608601908601612803565b60ff16837f50037ba44c943a4808df5f8ba1c4f9128496ec1c040cfe975688e65f51dcbfae60405160405180910390a350505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b60006116e76111ff565b90506001600160a01b0383166117125782604051630b61174360e31b81526004016106d99190612207565b6001600160a01b038481166000818152600584016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b6001600160a01b0383163b1561189457604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906117c4908890889087908790600401612e34565b6020604051808303816000875af19250505080156117ff575060408051601f3d908101601f191682019092526117fc91810190612e71565b60015b61185f573d80801561182d576040519150601f19603f3d011682016040523d82523d6000602084013e611832565b606091505b5080516000036118575783604051633250574960e11b81526004016106d99190612207565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b146118925783604051633250574960e11b81526004016106d99190612207565b505b5050505050565b6060816000036118c25750506040805180820190915260018152600360fc1b602082015290565b8160005b81156118ec57806118d68161284d565b91506118e59050600a83612ea4565b91506118c6565b6000816001600160401b03811115611906576119066123f0565b6040519080825280601f01601f191660200182016040528015611930576020820181803683370190505b5090505b841561153657611945600183612eb8565b9150611952600a86612ecb565b61195d906030612b59565b60f81b81838151811061197257611972612866565b60200101906001600160f81b031916908160001a905350611994600a86612ea4565b9450611934565b805160609060008190036119bf575050604080516020810190915260008152919050565b600060036119ce836002612b59565b6119d89190612ea4565b6119e3906004612b42565b905060006119f2826020612b59565b6001600160401b03811115611a0957611a096123f0565b6040519080825280601f01601f191660200182016040528015611a33576020820181803683370190505b5090506000604051806060016040528060408152602001612ffb604091399050600181016020830160005b86811015611abf576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101611a5e565b506003860660018114611ad95760028114611aea57611af6565b613d3d60f01b600119830152611af6565b603d60f81b6000198301525b505050918152949350505050565b600080611b0f6111ff565b6000938452600201602052505060409020546001600160a01b031690565b6000611b376111ff565b90508180611b4d57506001600160a01b03831615155b15611c06576000611b5d85611223565b90506001600160a01b03841615801590611b895750836001600160a01b0316816001600160a01b031614155b8015611b9c5750611b9a8185611059565b155b15611bbc578360405163a9fbf51f60e01b81526004016106d99190612207565b8215611c045784866001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b600093845260040160205250506040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611c45858585611dc5565b90506001600160a01b038116611c6357611c5e84611ecc565b611c86565b846001600160a01b0316816001600160a01b031614611c8657611c868185611f05565b6001600160a01b038516611ca257611c9d84611f9e565b611536565b846001600160a01b0316816001600160a01b031614611536576115368585612067565b6001600160a01b0382166000818152600560205260408082208054600160ff871690811b90911790915590519092917faa259565575c834bc07e74dca784b4071676133ac78513b431afb6ee7edae12191a35050565b6001600160a01b0382166000818152600560205260408082208054600160ff871690811b1990911690915590519092917f34a1009b84e077aee5bc8197faf7105e54f9ba6879e2a51a716e4156ea9ad76991a35050565b611d7a6120bf565b610bdb57604051631afcd79f60e31b815260040160405180910390fd5b611d9f611d72565b6000611da96111ff565b905080611db68482612f26565b506001810161073d8382612f26565b600080611dd06111ff565b90506000611ddd85611b04565b90506001600160a01b03841615611df957611df98185876120d9565b6001600160a01b03811615611e3957611e16600086600080611b2d565b6001600160a01b0381166000908152600383016020526040902080546000190190555b6001600160a01b03861615611e6a576001600160a01b03861660009081526003830160205260409020805460010190555b600085815260028301602052604080822080546001600160a01b0319166001600160a01b038a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b6000611ed661136b565b600281018054600085815260039093016020908152604084208290556001820183559183529120019190915550565b6000611f0f61136b565b90506000611f1c84610b71565b60008481526001840160209081526040808320546001600160a01b03891684529186905290912091925090818314611f76576000838152602082815260408083205485845281842081905583526001870190915290208290555b6000948552600190930160209081526040808620869055928552929092528220919091555050565b6000611fa861136b565b6002810154909150600090611fbf90600190612eb8565b6000848152600384016020526040812054600285018054939450909284908110611feb57611feb612866565b906000526020600020015490508084600201838154811061200e5761200e612866565b60009182526020808320909101929092558281526003860190915260408082208490558682528120556002840180548061204a5761204a612fe4565b600190038181906000526020600020016000905590555050505050565b600061207161136b565b90506000600161208085610b71565b61208a9190612eb8565b6001600160a01b0390941660009081526020838152604080832087845282528083208690559482526001909301909252502055565b60006120c9611579565b54600160401b900460ff16919050565b6120e48383836114d8565b610952576001600160a01b03831661211257604051637e27328960e01b8152600481018290526024016106d9565b818160405163177e802f60e01b81526004016106d992919061281e565b604051806123c0016040528061011e905b60608152602001906001900390816121405790505090565b6001600160e01b03198116811461080057600080fd5b60006020828403121561218057600080fd5b8135610d8781612158565b60005b838110156121a657818101518382015260200161218e565b50506000910152565b600081518084526121c781602086016020860161218b565b601f01601f19169290920160200192915050565b602081526000610d8760208301846121af565b60006020828403121561220057600080fd5b5035919050565b6001600160a01b0391909116815260200190565b80356001600160a01b038116811461223257600080fd5b919050565b6000806040838503121561224a57600080fd5b6122538361221b565b946020939093013593505050565b8035801515811461223257600080fd5b6000806040838503121561228457600080fd5b8235915061229460208401612261565b90509250929050565b600080604083850312156122b057600080fd5b6122b98361221b565b915060208301356122c981612158565b809150509250929050565b6000806000606084860312156122e957600080fd5b6122f28461221b565b92506123006020850161221b565b929592945050506040919091013590565b6000606082840312801561232457600080fd5b509092915050565b803560ff8116811461223257600080fd5b6000806040838503121561235057600080fd5b6123598361221b565b91506122946020840161232c565b60008083601f84011261237957600080fd5b5081356001600160401b0381111561239057600080fd5b6020830191508360208285010111156123a857600080fd5b9250929050565b600080602083850312156123c257600080fd5b82356001600160401b038111156123d857600080fd5b6123e485828601612367565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b6000806001600160401b03841115612420576124206123f0565b50604051601f19601f85018116603f011681018181106001600160401b038211171561244e5761244e6123f0565b60405283815290508082840185101561246657600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261248f57600080fd5b610d8783833560208501612406565b600080604083850312156124b157600080fd5b82356001600160401b038111156124c757600080fd5b6124d38582860161247e565b92505060208301356001600160401b038111156124ef57600080fd5b6124fb8582860161247e565b9150509250929050565b60008060006060848603121561251a57600080fd5b6125238461221b565b92506125316020850161221b565b9150604084013561254181612158565b809150509250925092565b60006020828403121561255e57600080fd5b610d878261221b565b6000806020838503121561257a57600080fd5b82356001600160401b0381111561259057600080fd5b8301601f810185136125a157600080fd5b80356001600160401b038111156125b757600080fd5b8560206060830284010111156125cc57600080fd5b6020919091019590945092505050565b600080604083850312156125ef57600080fd5b6125f88361221b565b915061229460208401612261565b6000806000806080858703121561261c57600080fd5b6126258561221b565b93506126336020860161221b565b92506040850135915060608501356001600160401b0381111561265557600080fd5b8501601f8101871361266657600080fd5b61267587823560208401612406565b91505092959194509250565b6000806040838503121561269457600080fd5b61269d8361221b565b91506122946020840161221b565b6000806000606084860312156126c057600080fd5b6126c98461221b565b92506126d76020850161232c565b91506126e560408501612261565b90509250925092565b60008060006040848603121561270357600080fd5b61270c8461232c565b925060208401356001600160401b0381111561272757600080fd5b61273386828701612367565b9497909650939450505050565b6000806020838503121561275357600080fd5b82356001600160401b0381111561276957600080fd5b8301601f8101851361277a57600080fd5b80356001600160401b0381111561279057600080fd5b8560208260061b84010111156125cc57600080fd5b600181811c908216806127b957607f821691505b6020821081036127d957634e487b7160e01b600052602260045260246000fd5b50919050565b805160208083015191908110156127d95760001960209190910360031b1b16919050565b60006020828403121561281557600080fd5b610d878261232c565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052601160045260246000fd5b60006001820161285f5761285f612837565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361289257612892612837565b60010192915050565b600081516128ad81856020860161218b565b9290920192915050565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323081527f30302f73766722207072657365727665417370656374526174696f3d22784d6960208201527f6e594d696e206d656574222076696577426f783d22302030203335302033353060408201527f223e3c7374796c653e2e68656164207b2066696c6c3a2079656c6c6f773b206660608201527f6f6e742d66616d696c793a2022496e74657220766172222c2073616e732d736560808201527f7269663b20666f6e742d73697a653a20313270783b207d202e62617365207b2060a08201527f66696c6c3a2077686974653b20666f6e742d66616d696c793a2022496e74657260c08201527f20766172222c2073616e732d73657269663b20666f6e742d73697a653a20313060e08201527f70783b207d3c2f7374796c653e3c726563742077696474683d223130302522206101008201527f6865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c74656101208201527f787420783d2231302220793d2232302220636c6173733d2268656164223e41636101408201526c031b2b9b9903a37b5b2b710119609d1b6101608201526000610d8761016d83018461289b565b7f3c2f746578743e3c7465787420783d2231302220793d2233302220636c61737381527101e913130b9b2911f102937b6329034b21d160751b602082015260008251612ad381603285016020870161218b565b9190910160320192915050565b7f3c2f746578743e3c7465787420783d2231302220793d2234302220636c61737381527301e913130b9b2911f102937b632903730b6b29d160651b602082015260008251612b3581603485016020870161218b565b9190910160340192915050565b808202811582820484141761056557610565612837565b8082018082111561056557610565612837565b6f1e3a32bc3a103c1e91189811103c9e9160811b81528351600090612b9881601085016020890161218b565b730111031b630b9b99e913130b9b2911f1034b21d160651b6010918401918201528451612bcc81602484016020890161218b565b601081830101915050660103730b6b29d160cd1b60148201528351612bf881601b84016020880161218b565b661e17ba32bc3a1f60c91b601b929091019182015260220195945050505050565b60008351612c2b81846020880161218b565b835190830190612c3f81836020880161218b565b01949350505050565b60008251612c5a81846020870161218b565b651e17b9bb339f60d11b920191825250600601919050565b777b226e616d65223a202241636365737320746f6b656e202360401b81528251600090612ca681601885016020880161218b565b7f222c20226465736372697074696f6e223a20225265616c697a6520726f6c65206018918401918201527f62617365642066756e6374696f6e206163636573732e204561737920746f207460388201527f72616e736665722e204561737920746f207573652e20456e6a6f792e222c202260588201527f696d616765223a2022646174613a696d6167652f7376672b786d6c3b626173656078820152620d8d0b60ea1b60988201528351612d6181609b84016020880161218b565b61227d60f01b609b9290910191820152609d01949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251612db481601d85016020870161218b565b91909101601d0192915050565b60006040828403128015612dd457600080fd5b50604080519081016001600160401b0381118282101715612df757612df76123f0565b60405282358152612e0a60208401612261565b60208201529392505050565b8035602083101561056557600019602084900360031b1b1692915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612e67908301846121af565b9695505050505050565b600060208284031215612e8357600080fd5b8151610d8781612158565b634e487b7160e01b600052601260045260246000fd5b600082612eb357612eb3612e8e565b500490565b8181038181111561056557610565612837565b600082612eda57612eda612e8e565b500690565b601f82111561095257806000526020600020601f840160051c81016020851015612f065750805b601f840160051c820191505b818110156118945760008155600101612f12565b81516001600160401b03811115612f3f57612f3f6123f0565b612f5381612f4d84546127a5565b84612edf565b6020601f821160018114612f875760008315612f6f5750848201515b600019600385901b1c1916600184901b178455611894565b600084815260208120601f198516915b82811015612fb75787850151825560209485019460019092019101612f97565b5084821015612fd55786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052603160045260246000fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e2053756d6d6172697a6564206163636f756e7420726f6c6573203c2f746578743ea2646970667358221220e643c7ff4918617e048e504fab011d7b091305470e1367cfcd3002af7107d1d164736f6c634300081c0033