@settlemint/solidity-zeto
Version:
Smart contract set to build Zero Knowledge tokens in SettleMint
474 lines (473 loc) • 48.8 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "zkDvP",
"sourceName": "contracts/zkDvP.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "paymentTokenAddress",
"type": "address"
},
{
"internalType": "address",
"name": "assetTokenAddress",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tradeId",
"type": "uint256"
},
{
"components": [
{
"internalType": "enum zkDvP.TradeStatus",
"name": "status",
"type": "uint8"
},
{
"internalType": "address",
"name": "paymentCounterparty",
"type": "address"
},
{
"internalType": "uint256[2]",
"name": "paymentInputs",
"type": "uint256[2]"
},
{
"internalType": "uint256[2]",
"name": "paymentOutputs",
"type": "uint256[2]"
},
{
"internalType": "bytes32",
"name": "paymentProofHash",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256[2]",
"name": "pA",
"type": "uint256[2]"
},
{
"internalType": "uint256[2][2]",
"name": "pB",
"type": "uint256[2][2]"
},
{
"internalType": "uint256[2]",
"name": "pC",
"type": "uint256[2]"
}
],
"internalType": "struct Commonlib.Proof",
"name": "paymentProof",
"type": "tuple"
},
{
"internalType": "address",
"name": "assetCounterparty",
"type": "address"
},
{
"internalType": "uint256",
"name": "assetInput",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "assetOutput",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "assetProofHash",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256[2]",
"name": "pA",
"type": "uint256[2]"
},
{
"internalType": "uint256[2][2]",
"name": "pB",
"type": "uint256[2][2]"
},
{
"internalType": "uint256[2]",
"name": "pC",
"type": "uint256[2]"
}
],
"internalType": "struct Commonlib.Proof",
"name": "assetProof",
"type": "tuple"
}
],
"indexed": false,
"internalType": "struct zkDvP.Trade",
"name": "trade",
"type": "tuple"
}
],
"name": "TradeAccepted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tradeId",
"type": "uint256"
},
{
"components": [
{
"internalType": "enum zkDvP.TradeStatus",
"name": "status",
"type": "uint8"
},
{
"internalType": "address",
"name": "paymentCounterparty",
"type": "address"
},
{
"internalType": "uint256[2]",
"name": "paymentInputs",
"type": "uint256[2]"
},
{
"internalType": "uint256[2]",
"name": "paymentOutputs",
"type": "uint256[2]"
},
{
"internalType": "bytes32",
"name": "paymentProofHash",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256[2]",
"name": "pA",
"type": "uint256[2]"
},
{
"internalType": "uint256[2][2]",
"name": "pB",
"type": "uint256[2][2]"
},
{
"internalType": "uint256[2]",
"name": "pC",
"type": "uint256[2]"
}
],
"internalType": "struct Commonlib.Proof",
"name": "paymentProof",
"type": "tuple"
},
{
"internalType": "address",
"name": "assetCounterparty",
"type": "address"
},
{
"internalType": "uint256",
"name": "assetInput",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "assetOutput",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "assetProofHash",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256[2]",
"name": "pA",
"type": "uint256[2]"
},
{
"internalType": "uint256[2][2]",
"name": "pB",
"type": "uint256[2][2]"
},
{
"internalType": "uint256[2]",
"name": "pC",
"type": "uint256[2]"
}
],
"internalType": "struct Commonlib.Proof",
"name": "assetProof",
"type": "tuple"
}
],
"indexed": false,
"internalType": "struct zkDvP.Trade",
"name": "trade",
"type": "tuple"
}
],
"name": "TradeCompleted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tradeId",
"type": "uint256"
},
{
"components": [
{
"internalType": "enum zkDvP.TradeStatus",
"name": "status",
"type": "uint8"
},
{
"internalType": "address",
"name": "paymentCounterparty",
"type": "address"
},
{
"internalType": "uint256[2]",
"name": "paymentInputs",
"type": "uint256[2]"
},
{
"internalType": "uint256[2]",
"name": "paymentOutputs",
"type": "uint256[2]"
},
{
"internalType": "bytes32",
"name": "paymentProofHash",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256[2]",
"name": "pA",
"type": "uint256[2]"
},
{
"internalType": "uint256[2][2]",
"name": "pB",
"type": "uint256[2][2]"
},
{
"internalType": "uint256[2]",
"name": "pC",
"type": "uint256[2]"
}
],
"internalType": "struct Commonlib.Proof",
"name": "paymentProof",
"type": "tuple"
},
{
"internalType": "address",
"name": "assetCounterparty",
"type": "address"
},
{
"internalType": "uint256",
"name": "assetInput",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "assetOutput",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "assetProofHash",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256[2]",
"name": "pA",
"type": "uint256[2]"
},
{
"internalType": "uint256[2][2]",
"name": "pB",
"type": "uint256[2][2]"
},
{
"internalType": "uint256[2]",
"name": "pC",
"type": "uint256[2]"
}
],
"internalType": "struct Commonlib.Proof",
"name": "assetProof",
"type": "tuple"
}
],
"indexed": false,
"internalType": "struct zkDvP.Trade",
"name": "trade",
"type": "tuple"
}
],
"name": "TradeInitiated",
"type": "event"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tradeId",
"type": "uint256"
},
{
"internalType": "uint256[2]",
"name": "paymentInputs",
"type": "uint256[2]"
},
{
"internalType": "uint256[2]",
"name": "paymentOutputs",
"type": "uint256[2]"
},
{
"internalType": "bytes32",
"name": "paymentProofHash",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "assetInput",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "assetOutput",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "assetProofHash",
"type": "bytes32"
}
],
"name": "acceptTrade",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tradeId",
"type": "uint256"
},
{
"components": [
{
"internalType": "uint256[2]",
"name": "pA",
"type": "uint256[2]"
},
{
"internalType": "uint256[2][2]",
"name": "pB",
"type": "uint256[2][2]"
},
{
"internalType": "uint256[2]",
"name": "pC",
"type": "uint256[2]"
}
],
"internalType": "struct Commonlib.Proof",
"name": "proof",
"type": "tuple"
}
],
"name": "completeTrade",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[2]",
"name": "paymentInputs",
"type": "uint256[2]"
},
{
"internalType": "uint256[2]",
"name": "paymentOutputs",
"type": "uint256[2]"
},
{
"internalType": "bytes32",
"name": "paymentProofHash",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "assetInput",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "assetOutput",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "assetProofHash",
"type": "bytes32"
}
],
"name": "initiateTrade",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x608034608b57601f6123c338819003918201601f19168301916001600160401b038311848410176090578084926040948552833981010312608b57604b602060458360a6565b920160a6565b6000600381905580546001600160a01b039384166001600160a01b0319918216179091556001805492909316911617905560405161230990816100ba8239f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203608b5756fe6080604052600436101561001257600080fd5b6000803560e01c80631944ac701461142e5780635fec4eb9146107625763652c59e11461003e57600080fd5b3461075f576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261075f57366023121561075f5760408051906100868183611e19565b813660441161075d576004905b6044821061074d5750503660631215610749578051916100b38284611e19565b8236608411610745576044905b608482106107355750849182915060c43560a4356100dd83612278565b15801561072c575b156106c3576100f383612278565b15806106ba575b61062b5761010783612278565b156105ac575b80610534575b85519361011f85611dfd565b865161012b8882611e19565b873682378552865161013d8882611e19565b895b8881106105175750602086015286516101588882611e19565b873682378786015286519761016c89611db1565b89895273ffffffffffffffffffffffffffffffffffffffff60208a01971687528789019485526060890190815260808901608435815260a08a019187835273ffffffffffffffffffffffffffffffffffffffff60c08c019416845260e08b019485526101008b019586526101208b019660e43588526101408c019889526003548d5260026020528a8d20998c519060048210156104ea578c9a99989796959493928f91928d937fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff008754935160081b169316911617178355515b600282106104cf57505050518c5b600281106104b55750505160058901555180518b5b6002811061049b575050602081015160088901908c905b60028210610456575050508601518a5b6002811061043c57505073ffffffffffffffffffffffffffffffffffffffff600e88019151167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905551600f860155516010850155516011840155518051865b600281106104225750506020810151601484019087905b600282106103e7575050500151845b600281106103d0575050507f322df2b48e8c3e522e8d4b7b7d22987b0cdd98e9a3c54a6954d028fc7b9355736103706003549384935191829182612010565b0390a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103a35760010160035580f35b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b600190602083519301926018828601015501610331565b80919293945051885b6002811061040e575050600260206001920193019101859392610322565b6001906020835193019281870155016103f0565b81518582016012015585935060209091019060010161030b565b8151898201600c01558997506020909101906001016102a7565b8091929394959697989950518d5b600281106104875750506002602060019201930191018a98979695949392610297565b600190602083519301928187015501610464565b81518a8201600601558a9850602090910190600101610280565b81518b8201600301558b995060209091019060010161026b565b805160019383018401558d9b508c929091019060200161025d565b60248f7f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b60209089516105268b82611e19565b8a368237818401520161013f565b92508015610543573392610113565b6084855162461bcd60e51b815260206004820152603860248201527f4173736574206f75747075742063616e6e6f74206265207a65726f207768656e60448201527f20617373657420696e707574206973206e6f6e2d7a65726f00000000000000006064820152fd5b93506105b786612278565b6105c257339361010d565b6084855162461bcd60e51b815260206004820152603f60248201527f5061796d656e74206f7574707574732063616e6e6f74206265207a65726f207760448201527f68656e207061796d656e7420696e7075747320617265206e6f6e2d7a65726f006064820152fd5b60a4865162461bcd60e51b815260206004820152604260248201527f5061796d656e7420696e7075747320616e6420617373657420696e707574206360448201527f616e6e6f742062652070726f7669646564206174207468652073616d6520746960648201527f6d650000000000000000000000000000000000000000000000000000000000006084820152fd5b508015156100fa565b6084865162461bcd60e51b815260206004820152603e60248201527f5061796d656e7420696e7075747320616e6420617373657420696e707574206360448201527f616e6e6f74206265207a65726f206174207468652073616d652074696d6500006064820152fd5b508015156100e5565b81358152602091820191016100c0565b8480fd5b8280fd5b8135815260209182019101610093565b835b80fd5b503461075f576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261075f576101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261075f5760043581526002602052604081209061088f6012604051936107df85611db1565b73ffffffffffffffffffffffffffffffffffffffff815461080360ff821688611ea4565b60081c16602086015261081860018201611edf565b604086015261082960038201611edf565b60608601526005810154608086015261084460068201611f16565b60a086015273ffffffffffffffffffffffffffffffffffffffff600e8201541660c0860152600f81015460e08601526010810154610100860152601181015461012086015201611f16565b61014083015281516004811015611401577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161139757604051610100810181811067ffffffffffffffff82111761136a57604052602435815260443560208201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043560e082015260405160208101918284905b6008821061135457505050610100815261094a61012082611e19565b51902060808301518103611277575090610963366120df565b60a08201528173ffffffffffffffffffffffffffffffffffffffff815416803b15611268578160405180927f12c0fed20000000000000000000000000000000000000000000000000000000082528183816109c13060048301612181565b03925af1801561126c57611253575b50505b6004358252600260205260408220815160048110156110175781547fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff00602087015160081b1693169116171781556040820151835b6002811061123d5750506060820151835b600281106112265750506080820151600582015560a08201518051845b6002811061120f5750506020810151600883019085905b600282106111da5750505060400151835b600281106111c3575050600e810173ffffffffffffffffffffffffffffffffffffffff60c0840151167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560e0820151600f820155610100820151601082015561012082015160118201556101408201518051845b600281106111ac5750506020810151601483019085905b600282106111775750505060400151835b6002811061116057505050610b4f60a08201516122a5565b158061114b575b610b5e575080f35b60606020610c5d604051610b728482611e19565b600281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08401803685840137604086015151610bae836121e0565b528360408701510151610bc08361221c565b52610bce6040519586611e19565b600285523684860137606085015151610be6856121e0565b528260608601510151610bf88561221c565b5273ffffffffffffffffffffffffffffffffffffffff86541690868460a0880151610c98610c8d604051998a9889977f3e96e27300000000000000000000000000000000000000000000000000000000895261016060048a0152610164890190612244565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc888303016024890152612244565b916044860190611fbf565b82848203917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83016101448701525201925af19081156110b757839161112c575b50156110c25773ffffffffffffffffffffffffffffffffffffffff60015416602060e0830151610184610100850151918661014087015195610d5360405197889687957f6ed9d6a1000000000000000000000000000000000000000000000000000000008752600487015260248601526044850190611fbf565b610160610144840152816101648401525af19081156110b7578391611088575b501561104457600281526004358252600260205260408220815160048110156110175781547fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff00602087015160081b1693169116171781556040820151835b600281106110015750506060820151835b60028110610fea5750506080820151600582015560a08201518051845b60028110610fd35750506020810151600883019085905b60028210610f9e5750505060400151835b60028110610f87575050600e810173ffffffffffffffffffffffffffffffffffffffff60c0840151167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560e0820151600f820155610100820151601082015561012082015160118201556101408201518051845b60028110610f705750506020810151601483019085905b60028210610f3b5750505060400151835b60028110610f24575050507f50537982faf554620a6d5b585040dbea6fb3c8eb9c07045634507df560fdab2b60405180610f1e6004359482612010565b0390a280f35b600190602083519301926018828601015501610ee1565b8051875b60028110610f5c5750506002602060019201930191019091610ed0565b600190602083519301928187015501610f3f565b600190602083519301926012828701015501610eb9565b60019060208351930192600c828601015501610e3f565b8051875b60028110610fbf5750506002602060019201930191019091610e2e565b600190602083519301928187015501610fa2565b600190602083519301926006828701015501610e17565b600190602083519301926003828601015501610dfa565b6001906020835193019282828601015501610de9565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b606460405162461bcd60e51b815260206004820152602060248201527f4173736574206272616e6368206f6620746865207472616465206661696c65646044820152fd5b6110aa915060203d6020116110b0575b6110a28183611e19565b81019061222c565b38610d73565b503d611098565b6040513d85823e3d90fd5b608460405162461bcd60e51b815260206004820152602260248201527f5061796d656e74206272616e6368206f6620746865207472616465206661696c60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152fd5b611145915060203d6020116110b0576110a28183611e19565b38610cd9565b5061115a6101408201516122a5565b15610b56565b600190602083519301926018828601015501610b37565b8051875b600281106111985750506002602060019201930191019091610b26565b60019060208351930192818701550161117b565b600190602083519301926012828701015501610b0f565b60019060208351930192600c828601015501610a95565b8051875b600281106111fb5750506002602060019201930191019091610a84565b6001906020835193019281870155016111de565b600190602083519301926006828701015501610a6d565b600190602083519301926003828601015501610a50565b6001906020835193019282828601015501610a3f565b8161125d91611e19565b6112685781386109d0565b5080fd5b6040513d84823e3d90fd5b610120830151036113105761128b366120df565b61014083015273ffffffffffffffffffffffffffffffffffffffff60015416803b15611268578160405180927f12c0fed20000000000000000000000000000000000000000000000000000000082528183816112ea3060048301612181565b03925af1801561126c57611300575b50906109d3565b8161130a91611e19565b386112f9565b606460405162461bcd60e51b815260206004820152600d60248201527f496e76616c69642070726f6f66000000000000000000000000000000000000006044820152fd5b602080600192855181520193019101909161092e565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b608460405162461bcd60e51b815260206004820152602b60248201527f5472616465206d75737420626520696e2041434345505445442073746174652060448201527f746f20636f6d706c6574650000000000000000000000000000000000000000006064820152fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b503461075f576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261075f57366043121561075f5760408051906114778183611e19565b813660641161075d576024905b60648210611da157505036608312156107495780516114a38282611e19565b803660a411610745576064905b60a48210611d91575050600435845260026020528184209261158860128451956114d987611db1565b73ffffffffffffffffffffffffffffffffffffffff81546114fd60ff82168a611ea4565b60081c16602088015261151260018201611edf565b8688015261152260038201611edf565b60608801526005810154608088015261153d60068201611f16565b60a088015273ffffffffffffffffffffffffffffffffffffffff600e8201541660c0880152600f81015460e08801526010810154610100880152601181015461012088015201611f16565b61014085015273ffffffffffffffffffffffffffffffffffffffff60208501511615801590611d6e575b15611d2b5783516004811015611cfe57611c95576115d283850151612278565b611a9a576115df90612278565b15611a31576115ed90612278565b156119c85760c4351561195f5760e435156118f65760c43560e083015260e435610100830152610104356101208301523360c08301525b6001825260043583526002602052808320825160048110156118c95781547fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff00602088015160081b16931691161717815581830151845b600281106118b35750506060830151845b6002811061189c575050608083015160058201558160a08401518051865b600281106118825750506020810151600884019087905b60028210611847575050500151845b60028110611830575050600e810173ffffffffffffffffffffffffffffffffffffffff60c0850151167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560e0830151600f82015561010083015160108201556101208301516011820155816101408401518051865b600281106118165750506020810151601484019087905b600282106117db575050500151845b600281106117c4575050507fcb4990c5b64e07c8fce5f047b2cf6bb13a0bff026f4c15e865aed929fe7b89fa905180610f1e6004359482612010565b600190602083519301926018828601015501611788565b80919293945051885b60028110611802575050600260206001920193019101859392611779565b6001906020835193019281870155016117e4565b815185820160120155859350602090910190600101611762565b60019060208351930192600c8286010155016116e7565b80919293945051885b6002811061186e5750506002602060019201930191018593926116d8565b600190602083519301928187015501611850565b8151858201600601558593506020909101906001016116c1565b6001906020835193019260038286010155016116a3565b6001906020835193019282828601015501611692565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b6084905162461bcd60e51b815260206004820152603160248201527f4173736574206f7574707574206d7573742062652070726f766964656420746f60448201527f20616363657074207468652074726164650000000000000000000000000000006064820152fd5b6084905162461bcd60e51b815260206004820152603060248201527f417373657420696e707574206d7573742062652070726f766964656420746f2060448201527f61636365707420746865207472616465000000000000000000000000000000006064820152fd5b6084905162461bcd60e51b815260206004820152603760248201527f5061796d656e74206f75747075747320616c72656164792070726f766964656460448201527f2062792074686520747261646520696e69746961746f720000000000000000006064820152fd5b6084825162461bcd60e51b815260206004820152603660248201527f5061796d656e7420696e7075747320616c72656164792070726f76696465642060448201527f62792074686520747261646520696e69746961746f72000000000000000000006064820152fd5b60e0840151611aab575b5050611624565b60c435611c2c5760e435611bc357611ac281612278565b611b5a57611acf82612278565b611af15782840152606083015260a43560808301523360208301523880611aa4565b6084835162461bcd60e51b815260206004820152603460248201527f5061796d656e74206f757470757473206d7573742062652070726f766964656460448201527f20746f20616363657074207468652074726164650000000000000000000000006064820152fd5b6084835162461bcd60e51b815260206004820152603360248201527f5061796d656e7420696e70757473206d7573742062652070726f76696465642060448201527f746f2061636365707420746865207472616465000000000000000000000000006064820152fd5b6084835162461bcd60e51b815260206004820152603560248201527f4173736574206f75747075747320616c72656164792070726f7669646564206260448201527f792074686520747261646520696e69746961746f7200000000000000000000006064820152fd5b6084835162461bcd60e51b815260206004820152603460248201527f417373657420696e7075747320616c72656164792070726f766964656420627960448201527f2074686520747261646520696e69746961746f720000000000000000000000006064820152fd5b6084835162461bcd60e51b815260206004820152602a60248201527f5472616465206d75737420626520696e20494e4954494154454420737461746560448201527f20746f20616363657074000000000000000000000000000000000000000000006064820152fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b6064835162461bcd60e51b815260206004820152601460248201527f547261646520646f6573206e6f742065786973740000000000000000000000006044820152fd5b5073ffffffffffffffffffffffffffffffffffffffff60c08501511615156115b2565b81358152602091820191016114b0565b8135815260209182019101611484565b610160810190811067ffffffffffffffff821117611dce57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff821117611dce57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611dce57604052565b9080601f83011215611e9f576040805192611e758285611e19565b83918101928311611e9f57905b828210611e8f5750505090565b8135815260209182019101611e82565b600080fd5b6004821015611eb05752565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60405191906000835b60028210611f0057505050611efe604083611e19565b565b6001602081928554815201930191019091611ee8565b90604051611f2381611dfd565b8092611f2e81611edf565b82526040516040810181811067ffffffffffffffff821117611dce57604052600282016000825b60028210611f79575050506006604092611f7492602086015201611edf565b910152565b60026020600192611f8986611edf565b815201930191019091611f55565b906000905b60028210611fa957505050565b6020806001928551815201930191019091611f9c565b611fca828251611f97565b60208101516000604084015b60028210611ff25750505060400151611efe9160c00190611f97565b60206040826120046001948751611f97565b01930191019091611fd6565b91906103608301928151916004831015611eb05761014061026091611efe94845273ffffffffffffffffffffffffffffffffffffffff602082015116602085015261206360408201516040860190611f97565b61207560608201516080860190611f97565b608081015160c085015261209160a082015160e0860190611fbf565b73ffffffffffffffffffffffffffffffffffffffff60c0820151166101e085015260e08101516102008501526101008101516102208501526101208101516102408501520151910190611fbf565b906101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc830112611e9f5760405161211781611dfd565b8092612124816024611e5a565b82528060831215611e9f57604090815161213e8382611e19565b808260e411611e9f57836064915b60e48310612167575050506020840152611f749060e4611e5a565b6020906121748685611e5a565b815201910190849061214c565b6101208101929160406024833760646000604084015b600282106121ca5750505073ffffffffffffffffffffffffffffffffffffffff61010091604060e460c086013716910152565b6040808281866001953701930191019091612197565b8051156121ed5760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051600110156121ed5760400190565b90816020910312611e9f57518015158103611e9f5790565b906020808351928381520192019060005b8181106122625750505090565b8251845260209384019390920191600101612255565b60005b600281101561229e578060051b8201516122975760010161227b565b5050600090565b5050600190565b8051511590816122c4575b816122b9575090565b604091500151511590565b602081015151511591506122b056fea26469706673582212203ac56c6ead37466cc29d73c4b0c9476dfc6446d0519df96381abd93d655129c064736f6c634300081b0033",
"deployedBytecode": "0x6080604052600436101561001257600080fd5b6000803560e01c80631944ac701461142e5780635fec4eb9146107625763652c59e11461003e57600080fd5b3461075f576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261075f57366023121561075f5760408051906100868183611e19565b813660441161075d576004905b6044821061074d5750503660631215610749578051916100b38284611e19565b8236608411610745576044905b608482106107355750849182915060c43560a4356100dd83612278565b15801561072c575b156106c3576100f383612278565b15806106ba575b61062b5761010783612278565b156105ac575b80610534575b85519361011f85611dfd565b865161012b8882611e19565b873682378552865161013d8882611e19565b895b8881106105175750602086015286516101588882611e19565b873682378786015286519761016c89611db1565b89895273ffffffffffffffffffffffffffffffffffffffff60208a01971687528789019485526060890190815260808901608435815260a08a019187835273ffffffffffffffffffffffffffffffffffffffff60c08c019416845260e08b019485526101008b019586526101208b019660e43588526101408c019889526003548d5260026020528a8d20998c519060048210156104ea578c9a99989796959493928f91928d937fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff008754935160081b169316911617178355515b600282106104cf57505050518c5b600281106104b55750505160058901555180518b5b6002811061049b575050602081015160088901908c905b60028210610456575050508601518a5b6002811061043c57505073ffffffffffffffffffffffffffffffffffffffff600e88019151167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905551600f860155516010850155516011840155518051865b600281106104225750506020810151601484019087905b600282106103e7575050500151845b600281106103d0575050507f322df2b48e8c3e522e8d4b7b7d22987b0cdd98e9a3c54a6954d028fc7b9355736103706003549384935191829182612010565b0390a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103a35760010160035580f35b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b600190602083519301926018828601015501610331565b80919293945051885b6002811061040e575050600260206001920193019101859392610322565b6001906020835193019281870155016103f0565b81518582016012015585935060209091019060010161030b565b8151898201600c01558997506020909101906001016102a7565b8091929394959697989950518d5b600281106104875750506002602060019201930191018a98979695949392610297565b600190602083519301928187015501610464565b81518a8201600601558a9850602090910190600101610280565b81518b8201600301558b995060209091019060010161026b565b805160019383018401558d9b508c929091019060200161025d565b60248f7f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b60209089516105268b82611e19565b8a368237818401520161013f565b92508015610543573392610113565b6084855162461bcd60e51b815260206004820152603860248201527f4173736574206f75747075742063616e6e6f74206265207a65726f207768656e60448201527f20617373657420696e707574206973206e6f6e2d7a65726f00000000000000006064820152fd5b93506105b786612278565b6105c257339361010d565b6084855162461bcd60e51b815260206004820152603f60248201527f5061796d656e74206f7574707574732063616e6e6f74206265207a65726f207760448201527f68656e207061796d656e7420696e7075747320617265206e6f6e2d7a65726f006064820152fd5b60a4865162461bcd60e51b815260206004820152604260248201527f5061796d656e7420696e7075747320616e6420617373657420696e707574206360448201527f616e6e6f742062652070726f7669646564206174207468652073616d6520746960648201527f6d650000000000000000000000000000000000000000000000000000000000006084820152fd5b508015156100fa565b6084865162461bcd60e51b815260206004820152603e60248201527f5061796d656e7420696e7075747320616e6420617373657420696e707574206360448201527f616e6e6f74206265207a65726f206174207468652073616d652074696d6500006064820152fd5b508015156100e5565b81358152602091820191016100c0565b8480fd5b8280fd5b8135815260209182019101610093565b835b80fd5b503461075f576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261075f576101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261075f5760043581526002602052604081209061088f6012604051936107df85611db1565b73ffffffffffffffffffffffffffffffffffffffff815461080360ff821688611ea4565b60081c16602086015261081860018201611edf565b604086015261082960038201611edf565b60608601526005810154608086015261084460068201611f16565b60a086015273ffffffffffffffffffffffffffffffffffffffff600e8201541660c0860152600f81015460e08601526010810154610100860152601181015461012086015201611f16565b61014083015281516004811015611401577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161139757604051610100810181811067ffffffffffffffff82111761136a57604052602435815260443560208201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043560e082015260405160208101918284905b6008821061135457505050610100815261094a61012082611e19565b51902060808301518103611277575090610963366120df565b60a08201528173ffffffffffffffffffffffffffffffffffffffff815416803b15611268578160405180927f12c0fed20000000000000000000000000000000000000000000000000000000082528183816109c13060048301612181565b03925af1801561126c57611253575b50505b6004358252600260205260408220815160048110156110175781547fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff00602087015160081b1693169116171781556040820151835b6002811061123d5750506060820151835b600281106112265750506080820151600582015560a08201518051845b6002811061120f5750506020810151600883019085905b600282106111da5750505060400151835b600281106111c3575050600e810173ffffffffffffffffffffffffffffffffffffffff60c0840151167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560e0820151600f820155610100820151601082015561012082015160118201556101408201518051845b600281106111ac5750506020810151601483019085905b600282106111775750505060400151835b6002811061116057505050610b4f60a08201516122a5565b158061114b575b610b5e575080f35b60606020610c5d604051610b728482611e19565b600281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08401803685840137604086015151610bae836121e0565b528360408701510151610bc08361221c565b52610bce6040519586611e19565b600285523684860137606085015151610be6856121e0565b528260608601510151610bf88561221c565b5273ffffffffffffffffffffffffffffffffffffffff86541690868460a0880151610c98610c8d604051998a9889977f3e96e27300000000000000000000000000000000000000000000000000000000895261016060048a0152610164890190612244565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc888303016024890152612244565b916044860190611fbf565b82848203917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83016101448701525201925af19081156110b757839161112c575b50156110c25773ffffffffffffffffffffffffffffffffffffffff60015416602060e0830151610184610100850151918661014087015195610d5360405197889687957f6ed9d6a1000000000000000000000000000000000000000000000000000000008752600487015260248601526044850190611fbf565b610160610144840152816101648401525af19081156110b7578391611088575b501561104457600281526004358252600260205260408220815160048110156110175781547fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff00602087015160081b1693169116171781556040820151835b600281106110015750506060820151835b60028110610fea5750506080820151600582015560a08201518051845b60028110610fd35750506020810151600883019085905b60028210610f9e5750505060400151835b60028110610f87575050600e810173ffffffffffffffffffffffffffffffffffffffff60c0840151167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560e0820151600f820155610100820151601082015561012082015160118201556101408201518051845b60028110610f705750506020810151601483019085905b60028210610f3b5750505060400151835b60028110610f24575050507f50537982faf554620a6d5b585040dbea6fb3c8eb9c07045634507df560fdab2b60405180610f1e6004359482612010565b0390a280f35b600190602083519301926018828601015501610ee1565b8051875b60028110610f5c5750506002602060019201930191019091610ed0565b600190602083519301928187015501610f3f565b600190602083519301926012828701015501610eb9565b60019060208351930192600c828601015501610e3f565b8051875b60028110610fbf5750506002602060019201930191019091610e2e565b600190602083519301928187015501610fa2565b600190602083519301926006828701015501610e17565b600190602083519301926003828601015501610dfa565b6001906020835193019282828601015501610de9565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b606460405162461bcd60e51b815260206004820152602060248201527f4173736574206272616e6368206f6620746865207472616465206661696c65646044820152fd5b6110aa915060203d6020116110b0575b6110a28183611e19565b81019061222c565b38610d73565b503d611098565b6040513d85823e3d90fd5b608460405162461bcd60e51b815260206004820152602260248201527f5061796d656e74206272616e6368206f6620746865207472616465206661696c60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152fd5b611145915060203d6020116110b0576110a28183611e19565b38610cd9565b5061115a6101408201516122a5565b15610b56565b600190602083519301926018828601015501610b37565b8051875b600281106111985750506002602060019201930191019091610b26565b60019060208351930192818701550161117b565b600190602083519301926012828701015501610b0f565b60019060208351930192600c828601015501610a95565b8051875b600281106111fb5750506002602060019201930191019091610a84565b6001906020835193019281870155016111de565b600190602083519301926006828701015501610a6d565b600190602083519301926003828601015501610a50565b6001906020835193019282828601015501610a3f565b8161125d91611e19565b6112685781386109d0565b5080fd5b6040513d84823e3d90fd5b610120830151036113105761128b366120df565b61014083015273ffffffffffffffffffffffffffffffffffffffff60015416803b15611268578160405180927f12c0fed20000000000000000000000000000000000000000000000000000000082528183816112ea3060048301612181565b03925af1801561126c57611300575b50906109d3565b8161130a91611e19565b386112f9565b606460405162461bcd60e51b815260206004820152600d60248201527f496e76616c69642070726f6f66000000000000000000000000000000000000006044820152fd5b602080600192855181520193019101909161092e565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b608460405162461bcd60e51b815260206004820152602b60248201527f5472616465206d75737420626520696e2041434345505445442073746174652060448201527f746f20636f6d706c6574650000000000000000000000000000000000000000006064820152fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b503461075f576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261075f57366043121561075f5760408051906114778183611e19565b813660641161075d576024905b60648210611da157505036608312156107495780516114a38282611e19565b803660a411610745576064905b60a48210611d91575050600435845260026020528184209261158860128451956114d987611db1565b73ffffffffffffffffffffffffffffffffffffffff81546114fd60ff82168a611ea4565b60081c16602088015261151260018201611edf565b8688015261152260038201611edf565b60608801526005810154608088015261153d60068201611f16565b60a088015273ffffffffffffffffffffffffffffffffffffffff600e8201541660c0880152600f81015460e08801526010810154610100880152601181015461012088015201611f16565b61014085015273ffffffffffffffffffffffffffffffffffffffff60208501511615801590611d6e575b15611d2b5783516004811015611cfe57611c95576115d283850151612278565b611a9a576115df90612278565b15611a31576115ed90612278565b156119c85760c4351561195f5760e435156118f65760c43560e083015260e435610100830152610104356101208301523360c08301525b6001825260043583526002602052808320825160048110156118c95781547fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff00602088015160081b16931691161717815581830151845b600281106118b35750506060830151845b6002811061189c575050608083015160058201558160a08401518051865b600281106118825750506020810151600884019087905b60028210611847575050500151845b60028110611830575050600e810173ffffffffffffffffffffffffffffffffffffffff60c0850151167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560e0830151600f82015561010083015160108201556101208301516011820155816101408401518051865b600281106118165750506020810151601484019087905b600282106117db575050500151845b600281106117c4575050507fcb4990c5b64e07c8fce5f047b2cf6bb13a0bff026f4c15e865aed929fe7b89fa905180610f1e6004359482612010565b600190602083519301926018828601015501611788565b80919293945051885b60028110611802575050600260206001920193019101859392611779565b6001906020835193019281870155016117e4565b815185820160120155859350602090910190600101611762565b60019060208351930192600c8286010155016116e7565b80919293945051885b6002811061186e5750506002602060019201930191018593926116d8565b600190602083519301928187015501611850565b8151858201600601558593506020909101906001016116c1565b6001906020835193019260038286010155016116a3565b6001906020835193019282828601015501611692565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b6084905162461bcd60e51b815260206004820152603160248201527f4173736574206f7574707574206d7573742062652070726f766964656420746f60448201527f20616363657074207468652074726164650000000000000000000000000000006064820152fd5b6084905162461bcd60e51b815260206004820152603060248201527f417373657420696e707574206d7573742062652070726f766964656420746f2060448201527f61636365707420746865207472616465000000000000000000000000000000006064820152fd5b6084905162461bcd60e51b815260206004820152603760248201527f5061796d656e74206f75747075747320616c72656164792070726f766964656460448201527f2062792074686520747261646520696e69746961746f720000000000000000006064820152fd5b6084825162461bcd60e51b815260206004820152603660248201527f5061796d656e7420696e7075747320616c72656164792070726f76696465642060448201527f62792074686520747261646520696e69746961746f72000000000000000000006064820152fd5b60e0840151611aab575b5050611624565b60c435611c2c5760e435611bc357611ac281612278565b611b5a57611acf82612278565b611af15782840152606083015260a43560808301523360208301523880611aa4565b6084835162461bcd60e51b815260206004820152603460248201527f5061796d656e74206f757470757473206d7573742062652070726f766964656460448201527f20746f20616363657074207468652074726164650000000000000000000000006064820152fd5b6084835162461bcd60e51b815260206004820152603360248201527f5061796d656e7420696e70757473206d7573742062652070726f76696465642060448201527f746f2061636365707420746865207472616465000000000000000000000000006064820152fd5b6084835162461bcd60e51b815260206004820152603560248201527f4173736574206f75747075747320616c72656164792070726f7669646564206260448201527f792074686520747261646520696e69746961746f7200000000000000000000006064820152fd5b6084835162461bcd60e51b815260206004820152603460248201527f417373657420696e7075747320616c72656164792070726f766964656420627960448201527f2074686520747261646520696e69746961746f720000000000000000000000006064820152fd5b6084835162461bcd60e51b815260206004820152602a60248201527f5472616465206d75737420626520696e20494e4954494154454420737461746560448201527f20746f20616363657074000000000000000000000000000000000000000000006064820152fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b6064835162461bcd60e51b815260206004820152601460248201527f547261646520646f6573206e6f742065786973740000000000000000000000006044820152fd5b5073ffffffffffffffffffffffffffffffffffffffff60c08501511615156115b2565b81358152602091820191016114b0565b8135815260209182019101611484565b610160810190811067ffffffffffffffff821117611dce57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff821117611dce57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611dce57604052565b9080601f83011215611e9f576040805192611e758285611e19565b83918101928311611e9f57905b828210611e8f5750505090565b8135815260209182019101611e82565b600080fd5b6004821015611eb05752565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60405191906000835b60028210611f0057505050611efe604083611e19565b565b6001602081928554815201930191019091611ee8565b90604051611f2381611dfd565b8092611f2e81611edf565b82526040516040810181811067ffffffffffffffff821117611dce57604052600282016000825b60028210611f79575050506006604092611f7492602086015201611edf565b910152565b60026020600192611f8986611edf565b815201930191019091611f55565b906000905b60028210611fa957505050565b6020806001928551815201930191019091611f9c565b611fca828251611f97565b60208101516000604084015b60028210611ff25750505060400151611efe9160c00190611f97565b60206040826120046001948751611f97565b01930191019091611fd6565b91906103608301928151916004831015611eb05761014061026091611efe94845273ffffffffffffffffffffffffffffffffffffffff602082015116602085015261206360408201516040860190611f97565b61207560608201516080860190611f97565b608081015160c085015261209160a082015160e0860190611fbf565b73ffffffffffffffffffffffffffffffffffffffff60c0820151166101e085015260e08101516102008501526101008101516102208501526101208101516102408501520151910190611fbf565b906101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc830112611e9f5760405161211781611dfd565b8092612124816024611e5a565b82528060831215611e9f57604090815161213e8382611e19565b808260e411611e9f57836064915b60e48310612167575050506020840152611f749060e4611e5a565b6020906121748685611e5a565b815201910190849061214c565b6101208101929160406024833760646000604084015b600282106121ca5750505073ffffffffffffffffffffffffffffffffffffffff61010091604060e460c086013716910152565b6040808281866001953701930191019091612197565b8051156121ed5760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051600110156121ed5760400190565b90816020910312611e9f57518015158103611e9f5790565b906020808351928381520192019060005b8181106122625750505090565b8251845260209384019390920191600101612255565b60005b600281101561229e578060051b8201516122975760010161227b565b5050600090565b5050600190565b8051511590816122c4575b816122b9575090565b604091500151511590565b602081015151511591506122b056fea26469706673582212203ac56c6ead37466cc29d73c4b0c9476dfc6446d0519df96381abd93d655129c064736f6c634300081b0033",
"linkReferences": {},
"deployedLinkReferences": {}
}