UNPKG

@vaimee/my3sec-contracts

Version:

A set of contracts that implements the My3Sec protocol

479 lines (478 loc) 41.9 kB
{ "_format": "hh-sol-artifact-1", "contractName": "CertificateNFT", "sourceName": "contracts/organizations/CertificateNFT.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "safeMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280601381526020017f4d79335365632043657274696669636174657300000000000000000000000000815250604051806040016040528060048152602001634d33534360e01b8152508160009081620000769190620001a3565b506001620000858282620001a3565b505050620000a26200009c620000a860201b60201c565b620000ac565b6200026f565b3390565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200012957607f821691505b6020821081036200014a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019e57600081815260208120601f850160051c81016020861015620001795750805b601f850160051c820191505b818110156200019a5782815560010162000185565b5050505b505050565b81516001600160401b03811115620001bf57620001bf620000fe565b620001d781620001d0845462000114565b8462000150565b602080601f8311600181146200020f5760008415620001f65750858301515b600019600386901b1c1916600185901b1785556200019a565b600085815260208120601f198616915b8281101562000240578886015182559484019460019091019084016200021f565b50858210156200025f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611e08806200027f6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063b88d4fde11610071578063b88d4fde14610266578063c87b56dd14610279578063d204c45e1461028c578063e985e9c51461029f578063f2fde38b146102db57600080fd5b806370a082311461021f578063715018a6146102325780638da5cb5b1461023a57806395d89b411461024b578063a22cb4651461025357600080fd5b806323b872dd116100f457806323b872dd146101c05780632f745c59146101d357806342842e0e146101e65780634f6ccce7146101f95780636352211e1461020c57600080fd5b806301ffc9a71461013157806306fdde0314610159578063081812fc1461016e578063095ea7b31461019957806318160ddd146101ae575b600080fd5b61014461013f36600461178d565b6102ee565b60405190151581526020015b60405180910390f35b6101616102ff565b60405161015091906117fa565b61018161017c36600461180d565b610391565b6040516001600160a01b039091168152602001610150565b6101ac6101a7366004611842565b6103b8565b005b6008545b604051908152602001610150565b6101ac6101ce36600461186c565b6104d2565b6101b26101e1366004611842565b610503565b6101ac6101f436600461186c565b610599565b6101b261020736600461180d565b6105b4565b61018161021a36600461180d565b610647565b6101b261022d3660046118a8565b6106a7565b6101ac61072d565b600b546001600160a01b0316610181565b610161610741565b6101ac6102613660046118c3565b610750565b6101ac61027436600461198b565b61075f565b61016161028736600461180d565b610797565b6101b261029a366004611a07565b6107a2565b6101446102ad366004611a69565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6101ac6102e93660046118a8565b6107de565b60006102f982610857565b92915050565b60606000805461030e90611a9c565b80601f016020809104026020016040519081016040528092919081815260200182805461033a90611a9c565b80156103875780601f1061035c57610100808354040283529160200191610387565b820191906000526020600020905b81548152906001019060200180831161036a57829003601f168201915b5050505050905090565b600061039c8261087c565b506000908152600460205260409020546001600160a01b031690565b60006103c382610647565b9050806001600160a01b0316836001600160a01b0316036104355760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610451575061045181336102ad565b6104c35760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161042c565b6104cd83836108db565b505050565b6104dc3382610949565b6104f85760405162461bcd60e51b815260040161042c90611ad6565b6104cd8383836109c8565b600061050e836106a7565b82106105705760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161042c565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6104cd8383836040518060200160405280600081525061075f565b60006105bf60085490565b82106106225760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161042c565b6008828154811061063557610635611b23565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806102f95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161042c565b60006001600160a01b0382166107115760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161042c565b506001600160a01b031660009081526003602052604090205490565b610735610b39565b61073f6000610b93565b565b60606001805461030e90611a9c565b61075b338383610be5565b5050565b6107693383610949565b6107855760405162461bcd60e51b815260040161042c90611ad6565b61079184848484610cb3565b50505050565b60606102f982610ce6565b60006107ac610b39565b600c805490819060006107be83611b4f565b91905055506107cd8482610dee565b6107d78184610e08565b9392505050565b6107e6610b39565b6001600160a01b03811661084b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042c565b61085481610b93565b50565b60006001600160e01b0319821663780e9d6360e01b14806102f957506102f982610e9b565b6000818152600260205260409020546001600160a01b03166108545760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161042c565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061091082610647565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061095583610647565b9050806001600160a01b0316846001600160a01b0316148061099c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806109c05750836001600160a01b03166109b584610391565b6001600160a01b0316145b949350505050565b826001600160a01b03166109db82610647565b6001600160a01b031614610a015760405162461bcd60e51b815260040161042c90611b68565b6001600160a01b038216610a635760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161042c565b610a708383836001610eeb565b826001600160a01b0316610a8382610647565b6001600160a01b031614610aa95760405162461bcd60e51b815260040161042c90611b68565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600b546001600160a01b0316331461073f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042c565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603610c465760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161042c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610cbe8484846109c8565b610cca84848484610f74565b6107915760405162461bcd60e51b815260040161042c90611bad565b6060610cf18261087c565b6000828152600a602052604081208054610d0a90611a9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3690611a9c565b8015610d835780601f10610d5857610100808354040283529160200191610d83565b820191906000526020600020905b815481529060010190602001808311610d6657829003601f168201915b505050505090506000610da160408051602081019091526000815290565b90508051600003610db3575092915050565b815115610de5578082604051602001610dcd929190611bff565b60405160208183030381529060405292505050919050565b6109c084611075565b61075b8282604051806020016040528060008152506110e8565b6000828152600260205260409020546001600160a01b0316610e835760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b606482015260840161042c565b6000828152600a602052604090206104cd8282611c7c565b60006001600160e01b031982166380ac58cd60e01b1480610ecc57506001600160e01b03198216635b5e139f60e01b145b806102f957506301ffc9a760e01b6001600160e01b03198316146102f9565b610ef78484848461111b565b6001600160a01b038416156107915760405162461bcd60e51b815260206004820152603c60248201527f43657274696669636174654e46543a205468697320746f6b656e2063616e6e6f60448201527f74206265207472616e73666572726564206f6e6365206d696e74656400000000606482015260840161042c565b60006001600160a01b0384163b1561106a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610fb8903390899088908890600401611d3c565b6020604051808303816000875af1925050508015610ff3575060408051601f3d908101601f19168201909252610ff091810190611d79565b60015b611050573d808015611021576040519150601f19603f3d011682016040523d82523d6000602084013e611026565b606091505b5080516000036110485760405162461bcd60e51b815260040161042c90611bad565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506109c0565b506001949350505050565b60606110808261087c565b600061109760408051602081019091526000815290565b905060008151116110b757604051806020016040528060008152506107d7565b806110c18461125b565b6040516020016110d2929190611bff565b6040516020818303038152906040529392505050565b6110f283836112ee565b6110ff6000848484610f74565b6104cd5760405162461bcd60e51b815260040161042c90611bad565b61112784848484611487565b60018111156111965760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b606482015260840161042c565b816001600160a01b0385166111f2576111ed81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611215565b836001600160a01b0316856001600160a01b03161461121557611215858261150f565b6001600160a01b0384166112315761122c816115ac565b611254565b846001600160a01b0316846001600160a01b03161461125457611254848261165b565b5050505050565b606060006112688361169f565b600101905060008167ffffffffffffffff811115611288576112886118ff565b6040519080825280601f01601f1916602001820160405280156112b2576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846112bc57509392505050565b6001600160a01b0382166113445760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161042c565b6000818152600260205260409020546001600160a01b0316156113a95760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161042c565b6113b7600083836001610eeb565b6000818152600260205260409020546001600160a01b03161561141c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161042c565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001811115610791576001600160a01b038416156114cd576001600160a01b038416600090815260036020526040812080548392906114c7908490611d96565b90915550505b6001600160a01b03831615610791576001600160a01b03831660009081526003602052604081208054839290611504908490611da9565b909155505050505050565b6000600161151c846106a7565b6115269190611d96565b600083815260076020526040902054909150808214611579576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906115be90600190611d96565b600083815260096020526040812054600880549394509092849081106115e6576115e6611b23565b90600052602060002001549050806008838154811061160757611607611b23565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061163f5761163f611dbc565b6001900381819060005260206000200160009055905550505050565b6000611666836106a7565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106116de5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061170a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061172857662386f26fc10000830492506010015b6305f5e1008310611740576305f5e100830492506008015b612710831061175457612710830492506004015b60648310611766576064830492506002015b600a83106102f95760010192915050565b6001600160e01b03198116811461085457600080fd5b60006020828403121561179f57600080fd5b81356107d781611777565b60005b838110156117c55781810151838201526020016117ad565b50506000910152565b600081518084526117e68160208601602086016117aa565b601f01601f19169290920160200192915050565b6020815260006107d760208301846117ce565b60006020828403121561181f57600080fd5b5035919050565b80356001600160a01b038116811461183d57600080fd5b919050565b6000806040838503121561185557600080fd5b61185e83611826565b946020939093013593505050565b60008060006060848603121561188157600080fd5b61188a84611826565b925061189860208501611826565b9150604084013590509250925092565b6000602082840312156118ba57600080fd5b6107d782611826565b600080604083850312156118d657600080fd5b6118df83611826565b9150602083013580151581146118f457600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611930576119306118ff565b604051601f8501601f19908116603f01168101908282118183101715611958576119586118ff565b8160405280935085815286868601111561197157600080fd5b858560208301376000602087830101525050509392505050565b600080600080608085870312156119a157600080fd5b6119aa85611826565b93506119b860208601611826565b925060408501359150606085013567ffffffffffffffff8111156119db57600080fd5b8501601f810187136119ec57600080fd5b6119fb87823560208401611915565b91505092959194509250565b60008060408385031215611a1a57600080fd5b611a2383611826565b9150602083013567ffffffffffffffff811115611a3f57600080fd5b8301601f81018513611a5057600080fd5b611a5f85823560208401611915565b9150509250929050565b60008060408385031215611a7c57600080fd5b611a8583611826565b9150611a9360208401611826565b90509250929050565b600181811c90821680611ab057607f821691505b602082108103611ad057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611b6157611b61611b39565b5060010190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008351611c118184602088016117aa565b835190830190611c258183602088016117aa565b01949350505050565b601f8211156104cd57600081815260208120601f850160051c81016020861015611c555750805b601f850160051c820191505b81811015611c7457828155600101611c61565b505050505050565b815167ffffffffffffffff811115611c9657611c966118ff565b611caa81611ca48454611a9c565b84611c2e565b602080601f831160018114611cdf5760008415611cc75750858301515b600019600386901b1c1916600185901b178555611c74565b600085815260208120601f198616915b82811015611d0e57888601518255948401946001909101908401611cef565b5085821015611d2c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611d6f908301846117ce565b9695505050505050565b600060208284031215611d8b57600080fd5b81516107d781611777565b818103818111156102f9576102f9611b39565b808201808211156102f9576102f9611b39565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203260e3e9b18c4c7e78a5da49e34a6e08ed87fdac12087df0967098d070af8a4c64736f6c63430008110033", "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063b88d4fde11610071578063b88d4fde14610266578063c87b56dd14610279578063d204c45e1461028c578063e985e9c51461029f578063f2fde38b146102db57600080fd5b806370a082311461021f578063715018a6146102325780638da5cb5b1461023a57806395d89b411461024b578063a22cb4651461025357600080fd5b806323b872dd116100f457806323b872dd146101c05780632f745c59146101d357806342842e0e146101e65780634f6ccce7146101f95780636352211e1461020c57600080fd5b806301ffc9a71461013157806306fdde0314610159578063081812fc1461016e578063095ea7b31461019957806318160ddd146101ae575b600080fd5b61014461013f36600461178d565b6102ee565b60405190151581526020015b60405180910390f35b6101616102ff565b60405161015091906117fa565b61018161017c36600461180d565b610391565b6040516001600160a01b039091168152602001610150565b6101ac6101a7366004611842565b6103b8565b005b6008545b604051908152602001610150565b6101ac6101ce36600461186c565b6104d2565b6101b26101e1366004611842565b610503565b6101ac6101f436600461186c565b610599565b6101b261020736600461180d565b6105b4565b61018161021a36600461180d565b610647565b6101b261022d3660046118a8565b6106a7565b6101ac61072d565b600b546001600160a01b0316610181565b610161610741565b6101ac6102613660046118c3565b610750565b6101ac61027436600461198b565b61075f565b61016161028736600461180d565b610797565b6101b261029a366004611a07565b6107a2565b6101446102ad366004611a69565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6101ac6102e93660046118a8565b6107de565b60006102f982610857565b92915050565b60606000805461030e90611a9c565b80601f016020809104026020016040519081016040528092919081815260200182805461033a90611a9c565b80156103875780601f1061035c57610100808354040283529160200191610387565b820191906000526020600020905b81548152906001019060200180831161036a57829003601f168201915b5050505050905090565b600061039c8261087c565b506000908152600460205260409020546001600160a01b031690565b60006103c382610647565b9050806001600160a01b0316836001600160a01b0316036104355760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610451575061045181336102ad565b6104c35760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161042c565b6104cd83836108db565b505050565b6104dc3382610949565b6104f85760405162461bcd60e51b815260040161042c90611ad6565b6104cd8383836109c8565b600061050e836106a7565b82106105705760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161042c565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6104cd8383836040518060200160405280600081525061075f565b60006105bf60085490565b82106106225760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161042c565b6008828154811061063557610635611b23565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806102f95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161042c565b60006001600160a01b0382166107115760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161042c565b506001600160a01b031660009081526003602052604090205490565b610735610b39565b61073f6000610b93565b565b60606001805461030e90611a9c565b61075b338383610be5565b5050565b6107693383610949565b6107855760405162461bcd60e51b815260040161042c90611ad6565b61079184848484610cb3565b50505050565b60606102f982610ce6565b60006107ac610b39565b600c805490819060006107be83611b4f565b91905055506107cd8482610dee565b6107d78184610e08565b9392505050565b6107e6610b39565b6001600160a01b03811661084b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042c565b61085481610b93565b50565b60006001600160e01b0319821663780e9d6360e01b14806102f957506102f982610e9b565b6000818152600260205260409020546001600160a01b03166108545760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161042c565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061091082610647565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061095583610647565b9050806001600160a01b0316846001600160a01b0316148061099c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806109c05750836001600160a01b03166109b584610391565b6001600160a01b0316145b949350505050565b826001600160a01b03166109db82610647565b6001600160a01b031614610a015760405162461bcd60e51b815260040161042c90611b68565b6001600160a01b038216610a635760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161042c565b610a708383836001610eeb565b826001600160a01b0316610a8382610647565b6001600160a01b031614610aa95760405162461bcd60e51b815260040161042c90611b68565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600b546001600160a01b0316331461073f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042c565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603610c465760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161042c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610cbe8484846109c8565b610cca84848484610f74565b6107915760405162461bcd60e51b815260040161042c90611bad565b6060610cf18261087c565b6000828152600a602052604081208054610d0a90611a9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3690611a9c565b8015610d835780601f10610d5857610100808354040283529160200191610d83565b820191906000526020600020905b815481529060010190602001808311610d6657829003601f168201915b505050505090506000610da160408051602081019091526000815290565b90508051600003610db3575092915050565b815115610de5578082604051602001610dcd929190611bff565b60405160208183030381529060405292505050919050565b6109c084611075565b61075b8282604051806020016040528060008152506110e8565b6000828152600260205260409020546001600160a01b0316610e835760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b606482015260840161042c565b6000828152600a602052604090206104cd8282611c7c565b60006001600160e01b031982166380ac58cd60e01b1480610ecc57506001600160e01b03198216635b5e139f60e01b145b806102f957506301ffc9a760e01b6001600160e01b03198316146102f9565b610ef78484848461111b565b6001600160a01b038416156107915760405162461bcd60e51b815260206004820152603c60248201527f43657274696669636174654e46543a205468697320746f6b656e2063616e6e6f60448201527f74206265207472616e73666572726564206f6e6365206d696e74656400000000606482015260840161042c565b60006001600160a01b0384163b1561106a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610fb8903390899088908890600401611d3c565b6020604051808303816000875af1925050508015610ff3575060408051601f3d908101601f19168201909252610ff091810190611d79565b60015b611050573d808015611021576040519150601f19603f3d011682016040523d82523d6000602084013e611026565b606091505b5080516000036110485760405162461bcd60e51b815260040161042c90611bad565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506109c0565b506001949350505050565b60606110808261087c565b600061109760408051602081019091526000815290565b905060008151116110b757604051806020016040528060008152506107d7565b806110c18461125b565b6040516020016110d2929190611bff565b6040516020818303038152906040529392505050565b6110f283836112ee565b6110ff6000848484610f74565b6104cd5760405162461bcd60e51b815260040161042c90611bad565b61112784848484611487565b60018111156111965760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b606482015260840161042c565b816001600160a01b0385166111f2576111ed81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611215565b836001600160a01b0316856001600160a01b03161461121557611215858261150f565b6001600160a01b0384166112315761122c816115ac565b611254565b846001600160a01b0316846001600160a01b03161461125457611254848261165b565b5050505050565b606060006112688361169f565b600101905060008167ffffffffffffffff811115611288576112886118ff565b6040519080825280601f01601f1916602001820160405280156112b2576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846112bc57509392505050565b6001600160a01b0382166113445760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161042c565b6000818152600260205260409020546001600160a01b0316156113a95760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161042c565b6113b7600083836001610eeb565b6000818152600260205260409020546001600160a01b03161561141c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161042c565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001811115610791576001600160a01b038416156114cd576001600160a01b038416600090815260036020526040812080548392906114c7908490611d96565b90915550505b6001600160a01b03831615610791576001600160a01b03831660009081526003602052604081208054839290611504908490611da9565b909155505050505050565b6000600161151c846106a7565b6115269190611d96565b600083815260076020526040902054909150808214611579576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906115be90600190611d96565b600083815260096020526040812054600880549394509092849081106115e6576115e6611b23565b90600052602060002001549050806008838154811061160757611607611b23565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061163f5761163f611dbc565b6001900381819060005260206000200160009055905550505050565b6000611666836106a7565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106116de5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061170a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061172857662386f26fc10000830492506010015b6305f5e1008310611740576305f5e100830492506008015b612710831061175457612710830492506004015b60648310611766576064830492506002015b600a83106102f95760010192915050565b6001600160e01b03198116811461085457600080fd5b60006020828403121561179f57600080fd5b81356107d781611777565b60005b838110156117c55781810151838201526020016117ad565b50506000910152565b600081518084526117e68160208601602086016117aa565b601f01601f19169290920160200192915050565b6020815260006107d760208301846117ce565b60006020828403121561181f57600080fd5b5035919050565b80356001600160a01b038116811461183d57600080fd5b919050565b6000806040838503121561185557600080fd5b61185e83611826565b946020939093013593505050565b60008060006060848603121561188157600080fd5b61188a84611826565b925061189860208501611826565b9150604084013590509250925092565b6000602082840312156118ba57600080fd5b6107d782611826565b600080604083850312156118d657600080fd5b6118df83611826565b9150602083013580151581146118f457600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611930576119306118ff565b604051601f8501601f19908116603f01168101908282118183101715611958576119586118ff565b8160405280935085815286868601111561197157600080fd5b858560208301376000602087830101525050509392505050565b600080600080608085870312156119a157600080fd5b6119aa85611826565b93506119b860208601611826565b925060408501359150606085013567ffffffffffffffff8111156119db57600080fd5b8501601f810187136119ec57600080fd5b6119fb87823560208401611915565b91505092959194509250565b60008060408385031215611a1a57600080fd5b611a2383611826565b9150602083013567ffffffffffffffff811115611a3f57600080fd5b8301601f81018513611a5057600080fd5b611a5f85823560208401611915565b9150509250929050565b60008060408385031215611a7c57600080fd5b611a8583611826565b9150611a9360208401611826565b90509250929050565b600181811c90821680611ab057607f821691505b602082108103611ad057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611b6157611b61611b39565b5060010190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008351611c118184602088016117aa565b835190830190611c258183602088016117aa565b01949350505050565b601f8211156104cd57600081815260208120601f850160051c81016020861015611c555750805b601f850160051c820191505b81811015611c7457828155600101611c61565b505050505050565b815167ffffffffffffffff811115611c9657611c966118ff565b611caa81611ca48454611a9c565b84611c2e565b602080601f831160018114611cdf5760008415611cc75750858301515b600019600386901b1c1916600185901b178555611c74565b600085815260208120601f198616915b82811015611d0e57888601518255948401946001909101908401611cef565b5085821015611d2c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611d6f908301846117ce565b9695505050505050565b600060208284031215611d8b57600080fd5b81516107d781611777565b818103818111156102f9576102f9611b39565b808201808211156102f9576102f9611b39565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203260e3e9b18c4c7e78a5da49e34a6e08ed87fdac12087df0967098d070af8a4c64736f6c63430008110033", "linkReferences": {}, "deployedLinkReferences": {} }