[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC1155InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC1155InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "idsLength", "type": "uint256" }, { "internalType": "uint256", "name": "valuesLength", "type": "uint256" } ], "name": "ERC1155InvalidArrayLength", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC1155InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC1155InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC1155InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC1155MissingApprovalForAll", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "batchId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "mineralType", "type": "string" }, { "indexed": false, "internalType": "address", "name": "miner", "type": "address" } ], "name": "BatchMinted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "requester", "type": "address" } ], "name": "PurchaseOrderCancelled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "requester", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "PurchaseOrderCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "fulfiller", "type": "address" }, { "indexed": false, "internalType": "enum PurchaseOrderERC1155.OrderStatus", "name": "status", "type": "uint8" } ], "name": "PurchaseOrderFulfilled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": false, "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "PurchaseOrderReceived", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": false, "internalType": "enum PurchaseOrderERC1155.OrderStatus", "name": "status", "type": "uint8" } ], "name": "PurchaseOrderStatusUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MANAGER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "batchCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "batches", "outputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "string", "name": "mineralType", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "fulfillPurchaseOrder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getAllPurchaseOrders", "outputs": [ { "components": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "internalType": "address", "name": "requester", "type": "address" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "supplier", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "enum PurchaseOrderERC1155.OrderStatus", "name": "status", "type": "uint8" } ], "internalType": "struct PurchaseOrderERC1155.PurchaseOrderStruct[]", "name": "orders", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "batchId", "type": "uint256" } ], "name": "getBatchDetails", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "getOwnedBatches", "outputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "string", "name": "mineralType", "type": "string" } ], "internalType": "struct MineralNFT.MineralBatch[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" } ], "name": "getPurchaseOrder", "outputs": [ { "components": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "internalType": "address", "name": "requester", "type": "address" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "supplier", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "enum PurchaseOrderERC1155.OrderStatus", "name": "status", "type": "uint8" } ], "internalType": "struct PurchaseOrderERC1155.PurchaseOrderStruct", "name": "order", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "string", "name": "mineralType", "type": "string" } ], "name": "mintMineralBatch", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "orderCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "ownedBatches", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "receivePurchaseOrder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
6080604052600060065534801561001557600080fd5b50604051806060016040528060298152602001612a536029913961003881610056565b50610044600033610066565b50610050600033610066565b50610273565b600261006282826101b5565b5050565b60008281526003602090815260408083206001600160a01b038516845290915281205460ff1661010c5760008381526003602090815260408083206001600160a01b03861684529091529020805460ff191660011790556100c43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610110565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061014057607f821691505b60208210810361016057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101b057806000526020600020601f840160051c8101602085101561018d5750805b601f840160051c820191505b818110156101ad5760008155600101610199565b50505b505050565b81516001600160401b038111156101ce576101ce610116565b6101e2816101dc845461012c565b84610166565b6020601f82116001811461021657600083156101fe5750848201515b600019600385901b1c1916600184901b1784556101ad565b600084815260208120601f198516915b828110156102465787850151825560209485019460019092019101610226565b50848210156102645786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6127d1806102826000396000f3fe608060405234801561001057600080fd5b50600436106101a85760003560e01c806396c7d08a116100f9578063c320f3a811610097578063df3e1d9711610071578063df3e1d97146103c4578063e985e9c5146103e4578063ec87621c146103f7578063f242432a1461041e57600080fd5b8063c320f3a81461037e578063c6619fb414610391578063d547741f146103b157600080fd5b8063a217fddf116100d3578063a217fddf14610347578063a22cb4651461034f578063b32c4d8d14610362578063b789bf521461037557600080fd5b806396c7d08a146102fd5780639d47dcc0146103105780639f464a9e1461033257600080fd5b80632f2ff15d116101665780634e1273f4116101405780634e1273f41461029a5780636394f6e6146102ba57806368233eef146102e157806391d14854146102ea57600080fd5b80632f2ff15d1461026157806336568abe1461027457806345d3f8861461028757600080fd5b8062fdd58e146101ad57806301ffc9a7146101d35780630cd90116146101f65780630e89341c14610209578063248a9ca3146102295780632eb2c2d61461024c575b600080fd5b6101c06101bb366004611d1d565b610431565b6040519081526020015b60405180910390f35b6101e66101e1366004611d5d565b610459565b60405190151581526020016101ca565b6101c0610204366004611d1d565b610499565b61021c610217366004611d81565b6104ca565b6040516101ca9190611de0565b6101c0610237366004611d81565b60009081526003602052604090206001015490565b61025f61025a366004611f44565b61055e565b005b61025f61026f366004611ff7565b6105ca565b61025f610282366004611ff7565b6105f5565b61025f610295366004612023565b61062d565b6102ad6102a8366004612093565b610812565b6040516101ca9190612196565b6101c07fa952726ef2588ad078edf35b066f7c7406e207cb0003bbaba8cb53eba9553e7281565b6101c060065481565b6101e66102f8366004611ff7565b6108de565b61025f61030b366004612023565b610909565b61032361031e366004611d81565b610b45565b6040516101ca939291906121a9565b61033a610c2c565b6040516101ca919061228c565b6101c0600081565b61025f61035d3660046122f1565b610e2c565b610323610370366004611d81565b610e3b565b6101c060045481565b6101c061038c36600461232d565b610ee6565b6103a461039f36600461237d565b611048565b6040516101ca9190612398565b61025f6103bf366004611ff7565b61122f565b6103d76103d2366004611d81565b611254565b6040516101ca9190612412565b6101e66103f2366004612425565b61140a565b6101c07f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b61025f61042c36600461244f565b611438565b6000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061048a57506001600160e01b0319821663da8def7360e01b145b80610453575061045382611497565b600860205281600052604060002081815481106104b557600080fd5b90600052602060002001600091509150505481565b6060600280546104d9906124a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610505906124a7565b80156105525780601f1061052757610100808354040283529160200191610552565b820191906000526020600020905b81548152906001019060200180831161053557829003601f168201915b50505050509050919050565b336001600160a01b038616811480159061057f575061057d868261140a565b155b156105b55760405163711bec9160e11b81526001600160a01b038083166004830152871660248201526044015b60405180910390fd5b6105c286868686866114bc565b505050505050565b6000828152600360205260409020600101546105e581611523565b6105ef8383611530565b50505050565b6001600160a01b038116331461061e5760405163334bd91960e11b815260040160405180910390fd5b61062882826115c4565b505050565b805182511461068a5760405162461bcd60e51b8152602060048201526024808201527f546f6b656e49647320616e6420616d6f756e7473206c656e677468206d69736d6044820152630c2e8c6d60e31b60648201526084016105ac565b60008251116106d15760405162461bcd60e51b8152602060048201526013602482015272139bc81d1bdad95b9cc81cdc1958da599a5959606a1b60448201526064016105ac565b6040805160e0810182528481523360208201819052918101919091523060608201526080810183905260a0810182905260c081016000905260008481526005602090815260409182902083518155838201516001820180546001600160a01b03199081166001600160a01b03938416179091559385015160028301805486169183169190911790556060850151600383018054909516911617909255608083015180516107849260048501920190611caf565b5060a082015180516107a0916005840191602090910190611caf565b5060c08201518160060160006101000a81548160ff021916908360068111156107cb576107cb6121d1565b0217905550905050827fdf89c92912f99e981e0b476f15e9aad16d7100dd4e606a7d210829afe74f7a5a83836040516108059291906124e1565b60405180910390a2505050565b606081518351146108435781518351604051635b05999160e01b8152600481019290925260248201526044016105ac565b600083516001600160401b0381111561085e5761085e611df3565b604051908082528060200260200182016040528015610887578160200160208202803683370190505b50905060005b84518110156108d6576020808202860101516108b190602080840287010151610431565b8282815181106108c3576108c3612506565b602090810291909101015260010161088d565b509392505050565b60009182526003602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0861093381611523565b60008481526005602052604081209060068083015460ff169081111561095b5761095b6121d1565b1461099f5760405162461bcd60e51b81526020600482015260146024820152734f72646572206973206e6f742070656e64696e6760601b60448201526064016105ac565b60038101546001600160a01b031630146109fb5760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420737570706c696572206f662074686973206f7264657200000000000060448201526064016105ac565b8251845114610a0957600080fd5b60005b84518160ff161015610af45760028201548551309163f242432a9183916001600160a01b031690899060ff8716908110610a4857610a48612506565b6020026020010151888660ff1681518110610a6557610a65612506565b60200260200101518b604051602001610a8091815260200190565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610aaf95949392919061251c565b600060405180830381600087803b158015610ac957600080fd5b505af1158015610add573d6000803e3d6000fd5b505050508080610aec90612577565b915050610a0c565b506006818101805460ff191682179055604051339187917f63a386a3d8108964f7abd4ea66a9ea84c1394d055283b0b92ffd62bb6c662ff791610b3691612596565b60405180910390a35050505050565b60008060606000600760008681526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282018054610b8e906124a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610bba906124a7565b8015610c075780601f10610bdc57610100808354040283529160200191610c07565b820191906000526020600020905b815481529060010190602001808311610bea57829003601f168201915b5050509190925250508151602083015160409093015190989297509550909350505050565b60606004546001600160401b03811115610c4857610c48611df3565b604051908082528060200260200182016040528015610cb557816020015b610ca26040805160e08101825260008082526020820181905291810182905260608082018390526080820181905260a08201529060c082015290565b815260200190600190039081610c665790505b50905060015b6004548111610e2857600081815260056020908152604091829020825160e0810184528154815260018201546001600160a01b0390811682850152600283015481168286015260038301541660608201526004820180548551818602810186019096528086529194929360808601939290830182828015610d5b57602002820191906000526020600020905b815481526020019060010190808311610d47575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015610db357602002820191906000526020600020905b815481526020019060010190808311610d9f575b505050918352505060068281015460209092019160ff1690811115610dda57610dda6121d1565b6006811115610deb57610deb6121d1565b90525082610dfa6001846125a4565b81518110610e0a57610e0a612506565b60200260200101819052508080610e20906125b7565b915050610cbb565b5090565b610e37338383611631565b5050565b60076020526000908152604090208054600182015460028301805492939192610e63906124a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8f906124a7565b8015610edc5780601f10610eb157610100808354040283529160200191610edc565b820191906000526020600020905b815481529060010190602001808311610ebf57829003601f168201915b5050505050905083565b60007fa952726ef2588ad078edf35b066f7c7406e207cb0003bbaba8cb53eba9553e72610f1281611523565b60008411610f625760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f60448201526064016105ac565b600160066000828254610f7591906125d0565b90915550506006546040805160608101825282815260208082018881528284018881526000868152600790935293909120825181559051600182015591519091906002820190610fc5908261262a565b5050336000818152600860209081526040808320805460018101825590845282842001869055805191820190529081526110039250839088906116c7565b7fbaee7f2f9e78dea3de3c8cc018b5012495dcfe47be749668924375c3bdd5df598186863360405161103894939291906126e8565b60405180910390a1949350505050565b6001600160a01b03811660009081526008602090815260408083208054825181850281018501909352808352606094938301828280156110a757602002820191906000526020600020905b815481526020019060010190808311611093575b50505050509050600081516001600160401b038111156110c9576110c9611df3565b60405190808252806020026020018201604052801561111e57816020015b61110b60405180606001604052806000815260200160008152602001606081525090565b8152602001906001900390816110e75790505b50905060005b82518110156108d6576007600084838151811061114357611143612506565b602002602001015181526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282018054611188906124a7565b80601f01602080910402602001604051908101604052809291908181526020018280546111b4906124a7565b80156112015780601f106111d657610100808354040283529160200191611201565b820191906000526020600020905b8154815290600101906020018083116111e457829003601f168201915b50505050508152505082828151811061121c5761121c612506565b6020908102919091010152600101611124565b60008281526003602052604090206001015461124a81611523565b6105ef83836115c4565b6112906040805160e08101825260008082526020820181905291810182905260608082018390526080820181905260a08201529060c082015290565b600082815260056020908152604091829020825160e0810184528154815260018201546001600160a01b039081168285015260028301548116828601526003830154166060820152600482018054855181860281018601909652808652919492936080860193929083018282801561132757602002820191906000526020600020905b815481526020019060010190808311611313575b505050505081526020016005820180548060200260200160405190810160405280929190818152602001828054801561137f57602002820191906000526020600020905b81548152602001906001019080831161136b575b505050918352505060068281015460209092019160ff16908111156113a6576113a66121d1565b60068111156113b7576113b76121d1565b90525080519091506000036114055760405162461bcd60e51b815260206004820152601460248201527313dc99195c88191bd95cc81b9bdd08195e1a5cdd60621b60448201526064016105ac565b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b336001600160a01b03861681148015906114595750611457868261140a565b155b1561148a5760405163711bec9160e11b81526001600160a01b038083166004830152871660248201526044016105ac565b6105c28686868686611724565b60006001600160e01b03198216637965db0b60e01b14806104535750610453826117b2565b6001600160a01b0384166114e657604051632bfa23e760e11b8152600060048201526024016105ac565b6001600160a01b03851661150f57604051626a0d4560e21b8152600060048201526024016105ac565b61151c8585858585611802565b5050505050565b61152d8133611855565b50565b600061153c83836108de565b6115bc5760008381526003602090815260408083206001600160a01b03861684529091529020805460ff191660011790556115743390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610453565b506000610453565b60006115d083836108de565b156115bc5760008381526003602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610453565b6001600160a01b03821661165a5760405162ced3e160e81b8152600060048201526024016105ac565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166116f157604051632bfa23e760e11b8152600060048201526024016105ac565b604080516001808252602082018690528183019081526060820185905260808201909252906105c2600087848487611802565b6001600160a01b03841661174e57604051632bfa23e760e11b8152600060048201526024016105ac565b6001600160a01b03851661177757604051626a0d4560e21b8152600060048201526024016105ac565b604080516001808252602082018690528183019081526060820185905260808201909252906117a98787848487611802565b50505050505050565b60006001600160e01b03198216636cdb3d1360e11b14806117e357506001600160e01b031982166303a24d0760e21b145b8061045357506301ffc9a760e01b6001600160e01b0319831614610453565b61180e8585858561188e565b6001600160a01b0384161561151c57825133906001036118475760208481015190840151611840838989858589611aa2565b50506105c2565b6105c2818787878787611bc6565b61185f82826108de565b610e375760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016105ac565b80518251146118bd5781518151604051635b05999160e01b8152600481019290925260248201526044016105ac565b3360005b83518110156119c3576020818102858101820151908501909101516001600160a01b03881615611974576000828152602081815260408083206001600160a01b038c1684529091529020548181101561194d576040516303dee4c560e01b81526001600160a01b038a1660048201526024810182905260448101839052606481018490526084016105ac565b6000838152602081815260408083206001600160a01b038d16845290915290209082900390555b6001600160a01b038716156119b9576000828152602081815260408083206001600160a01b038b168452909152812080548392906119b39084906125d0565b90915550505b50506001016118c1565b508251600103611a445760208301516000906020840151909150856001600160a01b0316876001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051611a35929190918252602082015260400190565b60405180910390a4505061151c565b836001600160a01b0316856001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611a939291906124e1565b60405180910390a45050505050565b6001600160a01b0384163b156105c25760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611ae6908990899088908890889060040161251c565b6020604051808303816000875af1925050508015611b21575060408051601f3d908101601f19168201909252611b1e91810190612720565b60015b611b8a573d808015611b4f576040519150601f19603f3d011682016040523d82523d6000602084013e611b54565b606091505b508051600003611b8257604051632bfa23e760e11b81526001600160a01b03861660048201526024016105ac565b805181602001fd5b6001600160e01b0319811663f23a6e6160e01b146117a957604051632bfa23e760e11b81526001600160a01b03861660048201526024016105ac565b6001600160a01b0384163b156105c25760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611c0a908990899088908890889060040161273d565b6020604051808303816000875af1925050508015611c45575060408051601f3d908101601f19168201909252611c4291810190612720565b60015b611c73573d808015611b4f576040519150601f19603f3d011682016040523d82523d6000602084013e611b54565b6001600160e01b0319811663bc197c8160e01b146117a957604051632bfa23e760e11b81526001600160a01b03861660048201526024016105ac565b828054828255906000526020600020908101928215611cea579160200282015b82811115611cea578251825591602001919060010190611ccf565b50610e289291505b80821115610e285760008155600101611cf2565b80356001600160a01b038116811461140557600080fd5b60008060408385031215611d3057600080fd5b611d3983611d06565b946020939093013593505050565b6001600160e01b03198116811461152d57600080fd5b600060208284031215611d6f57600080fd5b8135611d7a81611d47565b9392505050565b600060208284031215611d9357600080fd5b5035919050565b6000815180845260005b81811015611dc057602081850181015186830182015201611da4565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611d7a6020830184611d9a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611e3157611e31611df3565b604052919050565b60006001600160401b03821115611e5257611e52611df3565b5060051b60200190565b600082601f830112611e6d57600080fd5b8135611e80611e7b82611e39565b611e09565b8082825260208201915060208360051b860101925085831115611ea257600080fd5b602085015b83811015611ebf578035835260209283019201611ea7565b5095945050505050565b6000806001600160401b03841115611ee357611ee3611df3565b50601f8301601f1916602001611ef881611e09565b915050828152838383011115611f0d57600080fd5b828260208301376000602084830101529392505050565b600082601f830112611f3557600080fd5b611d7a83833560208501611ec9565b600080600080600060a08688031215611f5c57600080fd5b611f6586611d06565b9450611f7360208701611d06565b935060408601356001600160401b03811115611f8e57600080fd5b611f9a88828901611e5c565b93505060608601356001600160401b03811115611fb657600080fd5b611fc288828901611e5c565b92505060808601356001600160401b03811115611fde57600080fd5b611fea88828901611f24565b9150509295509295909350565b6000806040838503121561200a57600080fd5b8235915061201a60208401611d06565b90509250929050565b60008060006060848603121561203857600080fd5b8335925060208401356001600160401b0381111561205557600080fd5b61206186828701611e5c565b92505060408401356001600160401b0381111561207d57600080fd5b61208986828701611e5c565b9150509250925092565b600080604083850312156120a657600080fd5b82356001600160401b038111156120bc57600080fd5b8301601f810185136120cd57600080fd5b80356120db611e7b82611e39565b8082825260208201915060208360051b8501019250878311156120fd57600080fd5b6020840193505b828410156121265761211584611d06565b825260209384019390910190612104565b945050505060208301356001600160401b0381111561214457600080fd5b61215085828601611e5c565b9150509250929050565b600081518084526020840193506020830160005b8281101561218c57815186526020958601959091019060010161216e565b5093949350505050565b602081526000611d7a602083018461215a565b8381528260208201526060604082015260006121c86060830184611d9a565b95945050505050565b634e487b7160e01b600052602160045260246000fd5b6007811061220557634e487b7160e01b600052602160045260246000fd5b9052565b8051825260018060a01b03602082015116602083015260018060a01b03604082015116604083015260018060a01b0360608201511660608301526000608082015160e0608085015261225e60e085018261215a565b905060a083015184820360a0860152612277828261215a565b91505060c08301516108d660c08601826121e7565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156122e557603f198786030184526122d0858351612209565b945060209384019391909101906001016122b4565b50929695505050505050565b6000806040838503121561230457600080fd5b61230d83611d06565b91506020830135801515811461232257600080fd5b809150509250929050565b6000806040838503121561234057600080fd5b8235915060208301356001600160401b0381111561235d57600080fd5b8301601f8101851361236e57600080fd5b61215085823560208401611ec9565b60006020828403121561238f57600080fd5b611d7a82611d06565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156122e557603f198786030184528151805186526020810151602087015260408101519050606060408701526123fc6060870182611d9a565b95505060209384019391909101906001016123c0565b602081526000611d7a6020830184612209565b6000806040838503121561243857600080fd5b61244183611d06565b915061201a60208401611d06565b600080600080600060a0868803121561246757600080fd5b61247086611d06565b945061247e60208701611d06565b9350604086013592506060860135915060808601356001600160401b03811115611fde57600080fd5b600181811c908216806124bb57607f821691505b6020821081036124db57634e487b7160e01b600052602260045260246000fd5b50919050565b6040815260006124f4604083018561215a565b82810360208401526121c8818561215a565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061255690830184611d9a565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff810361258d5761258d612561565b60010192915050565b6020810161045382846121e7565b8181038181111561045357610453612561565b6000600182016125c9576125c9612561565b5060010190565b8082018082111561045357610453612561565b601f82111561062857806000526020600020601f840160051c8101602085101561260a5750805b601f840160051c820191505b8181101561151c5760008155600101612616565b81516001600160401b0381111561264357612643611df3565b6126578161265184546124a7565b846125e3565b6020601f82116001811461268b57600083156126735750848201515b600019600385901b1c1916600184901b17845561151c565b600084815260208120601f198516915b828110156126bb578785015182556020948501946001909201910161269b565b50848210156126d95786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b8481528360208201526080604082015260006127076080830185611d9a565b905060018060a01b038316606083015295945050505050565b60006020828403121561273257600080fd5b8151611d7a81611d47565b6001600160a01b0386811682528516602082015260a0604082018190526000906127699083018661215a565b828103606084015261277b818661215a565b9050828103608084015261278f8185611d9a565b9897505050505050505056fea26469706673582212209dd81460a08c0f068a409417dfcb0a119c3c4a8d84cb522d0518ccacd87182f364736f6c634300081a003368747470733a2f2f6170692e6578616d706c652e636f6d2f6d696e6572616c2f7b69647d2e6a736f6e