diff --git a/desktop/src/main.rs b/desktop/src/main.rs index 4148311..6366b22 100644 --- a/desktop/src/main.rs +++ b/desktop/src/main.rs @@ -30,7 +30,7 @@ const WINDOW_HEIGHT: u32 = (SCREEN_HEIGHT as u32) * SCALE; // const TICKS_PER_FRAME: usize = 5; sol! { - #[sol(rpc, bytecode="0x610a80604090815260f06080818152609060a081905260c081905260e0818152610100849052602061012081905260606101405261016081905261018081905260706101a0526101c085905260106101e08190526102008690526102208590526102408690526102608690526102808190526102a08690526102c08190526102e08690526103008490526103208490526103408690526103608190526103808190526103a08690526103c08590526103e08690526104008190526104208690526104408690526104608590526104808690526104a08490526104c08690526104e086905261050081905261052091909152610540869052610560959095526105808490526105a08290526105c08490526105e0829052610600849052610620849052610640829052610660849052610680949094526106a08390526106c08390526106e08190526107008390526107208190526107408190526107608490526107808190526107a08490526107c08190526107e08490526108008390526108208290526108408290526108608290526108808390526108a08490526108c08190526108e081905261090052610920929092526109408190526109608290526109808190526109a08290526109c08190526109e0819052610a00829052610a2052610a40819052610a608190526101f9906000906050610292565b5034801561020657600080fd5b506003805461ffff191661020017905560005b605081101561028c57600081605081106102355761023561033a565b602081049091015460ff601f9092166101000a900416600482611000811061025f5761025f61033a565b602091828204019190066101000a81548160ff021916908360ff1602179055508080600101915050610219565b50610350565b6003830191839082156103155791602002820160005b838211156102e657835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026102a8565b80156103135782816101000a81549060ff02191690556001016020816000010492830192600103026102e6565b505b50610321929150610325565b5090565b5b808211156103215760008155600101610326565b634e487b7160e01b600052603260045260246000fd5b6129f78061035f6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c8063997a40c0116100de578063ae344f8e11610097578063d19dc8b511610071578063d19dc8b514610343578063d2bf2e1c1461034f578063d826f88f14610373578063e781d8c51461037b57600080fd5b8063ae344f8e14610318578063c040622614610328578063cbc950191461033057600080fd5b8063997a40c0146102b45780639cba24bb146102c7578063a560ea3b146102df578063a72b6604146102f2578063a8b3ac7814610305578063a95c372d1461031057600080fd5b80637ef91424116101305780637ef914241461022957806380bc398e1461023e5780638153da0314610251578063825284fd146102645780638c41bd001461027757806392ddeea0146102a157600080fd5b8063074b6fac146101785780632f57e5f7146101825780633eaf5d9f146101b05780636398efc8146101b857806366050ab9146101e257806368ad83f114610208575b600080fd5b610180610387565b005b610180610190366004612576565b608d805461ffff909216620100000263ffff000019909216919091179055565b61018061040c565b6101cb6101c6366004612598565b610424565b60405160ff90911681526020015b60405180910390f35b6101806101f0366004612576565b608d805461ffff191661ffff92909216919091179055565b608d5462010000900461ffff165b60405161ffff90911681526020016101d9565b6102316104a6565b6040516101d991906125b1565b61018061024c3660046125e3565b6104e2565b61018061025f36600461263f565b610582565b61018061027236600461270f565b610664565b61018061028536600461273b565b6090805460ff9092166101000261ff0019909216919091179055565b6101806102af366004612756565b6106e8565b6101806102c2366004612779565b610771565b6102cf6107db565b60405190151581526020016101d9565b6101cb6102ed366004612598565b61083b565b610216610300366004612598565b6108a0565b60905460ff166101cb565b610216610922565b609054610100900460ff166101cb565b610180610a54565b61018061033e3660046125e3565b610b27565b608d5461ffff16610216565b61018061035d36600461273b565b6090805460ff191660ff92909216919091179055565b610180610ba2565b60035461ffff16610216565b60905460ff16156103c45760908054600191906000906103ab90849060ff166127b9565b92506101000a81548160ff021916908360ff1602179055505b609054610100900460ff161561040a57609080546001919082906103f1908290610100900460ff166127b9565b92506101000a81548160ff021916908360ff1602179055505b565b6000610416610922565b905061042181610d5c565b50565b600061100082106104765760405162461bcd60e51b815260206004820152601760248201527652414d20696e646578206f7574206f6620626f756e647360481b60448201526064015b60405180910390fd5b600482611000811061048a5761048a6127d8565b602081049091015460ff601f9092166101000a90041692915050565b6104ae612540565b604080516101008101918290529060849060089082845b8154815260200190600101908083116104c5575050505050905090565b61080082106105295760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b604482015260640161046d565b801561055857600160ff83161b6084600884811c90811061054c5761054c6127d8565b01805490911790555050565b600160ff83161b196084600884811c908110610576576105766127d8565b01805490911690555050565b80516102009060009061059590836127ee565b90506110008111156105e95760405162461bcd60e51b815260206004820152601c60248201527f4461746120746f6f206c6172676520746f2066697420696e2052414d00000000604482015260640161046d565b815b8181101561065a57836105fe8483612801565b8151811061060e5761060e6127d8565b6020026020010151600360010182611000811061062d5761062d6127d8565b602091828204019190066101000a81548160ff021916908360ff16021790555080806001019150506105eb565b5050905160915550565b61100082106106af5760405162461bcd60e51b815260206004820152601760248201527652414d20696e646578206f7574206f6620626f756e647360481b604482015260640161046d565b8060048361100081106106c4576106c46127d8565b602091828204019190066101000a81548160ff021916908360ff1602179055505050565b601082106107345760405162461bcd60e51b8152602060048201526019602482015278537461636b20696e646578206f7574206f6620626f756e647360381b604482015260640161046d565b80608e8360108110610748576107486127d8565b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055505050565b601060ff8316106107c45760405162461bcd60e51b815260206004820152601e60248201527f5620726567697374657220696e646578206f7574206f6620626f756e64730000604482015260640161046d565b80608c60ff8416601081106106c4576106c46127d8565b6084546000901580156107ee5750608554155b80156107fa5750608654155b80156108065750608754155b80156108125750608854155b801561081e5750608954155b801561082a5750608a54155b80156108365750608b54155b905090565b60006010821061088d5760405162461bcd60e51b815260206004820152601e60248201527f5620726567697374657220696e646578206f7574206f6620626f756e64730000604482015260640161046d565b608c826010811061048a5761048a6127d8565b6000601082106108ee5760405162461bcd60e51b8152602060048201526019602482015278537461636b20696e646578206f7574206f6620626f756e647360381b604482015260640161046d565b608e8260108110610901576109016127d8565b601091828204019190066002029054906101000a900461ffff169050919050565b6003546000906110009061093b9061ffff166001612814565b61ffff161061098c5760405162461bcd60e51b815260206004820152601d60248201527f50726f6772616d20636f756e746572206f7574206f6620626f756e6473000000604482015260640161046d565b60035460009060049061ffff1661100081106109aa576109aa6127d8565b602081049190910154600354601f9092166101000a900460ff1691506000906004906109db9061ffff166001612814565b61ffff1661100081106109f0576109f06127d8565b60208104919091015460038054601f9093166101000a90910460ff169250600884901b62ffff001683179160029190600090610a3190849061ffff16612814565b92506101000a81548161ffff021916908361ffff16021790555080935050505090565b609154610a975760405162461bcd60e51b8152602060048201526011602482015270050726f6772616d2073697a65206973203607c1b604482015260640161046d565b60005b60915481101561042157610ab1600161100061282e565b60035461ffff918216911610610b095760405162461bcd60e51b815260206004820152601d60248201527f50726f6772616d20636f756e746572206f7574206f6620626f756e6473000000604482015260640161046d565b6000610b13610922565b9050610b1e81610d5c565b50600101610a9a565b60108210610b6b5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840d6caf240d2dcc8caf607b1b604482015260640161046d565b80608f8360108110610b7f57610b7f6127d8565b602091828204019190066101000a81548160ff0219169083151502179055505050565b6003805461ffff191661020017905560005b6008811015610bdc57600060848260088110610bd257610bd26127d8565b0155600101610bb4565b5060005b6010811015610c2b576000608c8260108110610bfe57610bfe6127d8565b602091828204019190066101000a81548160ff021916908360ff1602179055508080600101915050610be0565b50608d805463ffffffff1916905560005b6010811015610c8c576000608e8260108110610c5a57610c5a6127d8565b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055508080600101915050610c3c565b5060005b6010811015610cda576000608f8260108110610cae57610cae6127d8565b602081049091018054921515601f9092166101000a91820260ff90920219909216179055600101610c90565b506090805461ffff1916905560005b60508110156104215760008160508110610d0557610d056127d8565b602081049091015460ff601f9092166101000a9004166004826110008110610d2f57610d2f6127d8565b602091828204019190066101000a81548160ff021916908360ff1602179055508080600101915050610ce9565b8061ffff16600003610d6b5750565b600f600c82901c811690600883901c811690600484901c811690841683158015610d96575060ff8316155b8015610da557508160ff16600e145b8015610db2575060ff8116155b15610dea5760005b6008811015610de257600060848260088110610dd857610dd86127d8565b0155600101610dba565b505050505050565b60ff8416158015610dfc575060ff8316155b8015610e0b57508160ff16600e145b8015610e1a57508060ff16600e145b15610e4457610e276123a5565b6003805461ffff191661ffff929092169190911790555050505050565b8360ff16600103610e6b5750506003805461ffff1916610fff909416939093179092555050565b8360ff16600203610e8c57600354610fff861690610e279061ffff1661246b565b8360ff16600303610f0b5760ff808616908190608c90861660108110610eb457610eb46127d8565b602081049091015460ff601f9092166101000a90041603610de2576003805460029190600090610ee990849061ffff16612814565b92506101000a81548161ffff021916908361ffff160217905550505050505050565b8360ff16600403610f685760ff808616908190608c90861660108110610f3357610f336127d8565b602081049091015460ff601f9092166101000a90041614610de2576003805460029190600090610ee990849061ffff16612814565b8360ff166005148015610f7c575060ff8116155b1561101b57608c60ff831660108110610f9757610f976127d8565b602081049091015460ff601f9092166101000a9004811690608c90851660108110610fc457610fc46127d8565b602081049091015460ff601f9092166101000a90041603611014576003805460029190600090610ff990849061ffff16612814565b92506101000a81548161ffff021916908361ffff1602179055505b5050505050565b8360ff1660060361106b5760ff808616908190608c90861660108110611043576110436127d8565b602091828204019190066101000a81548160ff021916908360ff160217905550505050505050565b8360ff166007036110d65760ff808616908190608c90861660108110611093576110936127d8565b602091828204019190068282829054906101000a900460ff166110b69190612848565b92506101000a81548160ff021916908360ff160217905550505050505050565b8360ff1660081480156110ea575060ff8116155b1561115957608c60ff831660108110611105576111056127d8565b602081049091015460ff601f9092166101000a9004811690608c90851660108110611132576111326127d8565b602091828204019190066101000a81548160ff021916908360ff1602179055505050505050565b8360ff16600814801561116f57508060ff166001145b156111f057608c60ff83166010811061118a5761118a6127d8565b602081049091015460ff601f9092166101000a9004811690608c908516601081106111b7576111b76127d8565b602091828204019190068282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505050505050565b8360ff16600814801561120657508060ff166002145b1561128057608c60ff831660108110611221576112216127d8565b602081049091015460ff601f9092166101000a9004811690608c9085166010811061124e5761124e6127d8565b602081049091018054601f9092166101000a80830490931660ff90811684029302199091169190911790555050505050565b8360ff16600814801561129657508060ff166003145b1561131057608c60ff8316601081106112b1576112b16127d8565b602081049091015460ff601f9092166101000a9004811690608c908516601081106112de576112de6127d8565b60208104909101805460ff601f9093166101000a80820484169094188316840292909302199092161790555050505050565b8360ff16600814801561132657508060ff166004145b156114005782826000608c60ff831660108110611345576113456127d8565b602081049091015460ff601f9092166101000a9004811690608c90851660108110611372576113726127d8565b6020810491909101546113919291601f166101000a900460ff16612814565b905060ff8161ffff16116113a65760006113a9565b60015b608c805460ff60781b1916600160781b60ff9384160217815582918516601081106113d6576113d66127d8565b602091828204019190066101000a81548160ff021916908360ff1602179055505050505050505050565b8360ff16600814801561141657508060ff166005145b15611514578282608c60ff821660108110611433576114336127d8565b602081049091015460ff601f9092166101000a9004811690608c90841660108110611460576114606127d8565b602081049091015460ff601f9092166101000a9004161015611483576000611486565b60015b608c805460ff60781b1916600160781b60ff93841602178155908216601081106114b2576114b26127d8565b602081049091015460ff601f9092166101000a9004811690608c908416601081106114df576114df6127d8565b60208104909101805460ff601f9093166101000a80820484169490940383168402929093021990921617905550505050505050565b8360ff16600814801561152a57508060ff166006145b156115bd5782608c60ff821660108110611546576115466127d8565b602081049190910154608c805460ff60781b19166001601f9094166101000a9092048316600160781b0291909117815560ff83166010811061158a5761158a6127d8565b60208104909101805460ff601f9093166101000a808204841690941c831684029290930219909216179055505050505050565b8360ff1660081480156115d357508060ff166007145b156116f5578282608c60ff8316601081106115f0576115f06127d8565b602081049091015460ff601f9092166101000a9004811690608c9083166010811061161d5761161d6127d8565b602081049091015460ff601f9092166101000a9004161015611640576000611643565b60015b608c805460ff60781b1916600160781b60ff938416021781559083166010811061166f5761166f6127d8565b602081049091015460ff601f9092166101000a9004811690608c9083166010811061169c5761169c6127d8565b602091828204019190069054906101000a900460ff160360036089018360ff16601081106116cc576116cc6127d8565b602091828204019190066101000a81548160ff021916908360ff16021790555050505050505050565b8360ff16600814801561170b57508060ff16600e145b156117a957826007608c60ff831660108110611729576117296127d8565b602081049190910154608c805460ff60781b1916601f9093166101000a90910460ff90811690931c6001908116600160781b029290921781559091831660108110611776576117766127d8565b60208104909101805460ff601f9093166101000a808204841690941b831684029290930219909216179055505050505050565b8360ff1660091480156117bd575060ff8116155b15611860578282608c60ff8216601081106117da576117da6127d8565b602081049091015460ff601f9092166101000a9004811690608c90841660108110611807576118076127d8565b602081049091015460ff601f9092166101000a9004161461185757600380546002919060009061183c90849061ffff16612814565b92506101000a81548161ffff021916908361ffff1602179055505b50505050505050565b8360ff16600a03611887575050608d805461ffff1916610fff909416939093179092555050565b8360ff16600b036118c757608c54610fff8616906118a990829060ff16612814565b6003805461ffff191661ffff92909216919091179055505050505050565b8360ff16600c0361195e578260ff86166000610100426118e8600143612801565b6003546040516119209392409161ffff1690602001928352602083019190915260f01b6001600160f01b031916604082015260420190565b6040516020818303038152906040528051906020012060001c6119439190612877565b9050818116608c60ff8516601081106113d6576113d66127d8565b8360ff16600d03611be15760006040608c60ff861660108110611983576119836127d8565b602091828204019190069054906101000a900460ff166119a3919061288b565b905060006020608c60ff8616601081106119bf576119bf6127d8565b602091828204019190069054906101000a900460ff166119df919061288b565b608c805460ff60781b1916905590508260005b8160ff168160ff161015611bd657608d54600090600490611a1b9060ff85169061ffff16612814565b61ffff166110008110611a3057611a306127d8565b602081049091015460ff601f9092166101000a900416905060005b60088160ff161015611bcc576000611a648260076127b9565b60ff168360ff16901c6001169050600060408389611a829190612848565b60ff16611a8f91906128ad565b61ffff16905060006020611aa3878a612848565b60ff16611ab091906128ad565b61ffff169050600082611ac46040846128d1565b611ace91906128f7565b90506000611ade61010083612913565b63ffffffff1690506000611af46101008461293b565b63ffffffff1690506000611b098260ff612801565b60848460088110611b1c57611b1c6127d8565b01546001911c8116158015925060ff8916909114821415908290611b3e575080155b15611b5757608c805460ff60781b1916600160781b1790555b8015611b8c57611b688360ff612801565b6001901b60848560088110611b7f57611b7f6127d8565b0180549091179055611bb8565b611b978360ff612801565b6001901b1960848560088110611baf57611baf6127d8565b01805490911690555b505060019096019550611a4b945050505050565b50506001016119f2565b505050505050505050565b8360ff16600e148015611bf757508160ff166009145b8015611c0657508060ff16600e145b15611cc557826000608c60ff831660108110611c2457611c246127d8565b602081049091015460ff601f9092166101000a900416905060108110611c7a5760405162461bcd60e51b815260206004820152600b60248201526a496e76616c6964206b657960a81b604482015260640161046d565b608f60ff821660108110611c9057611c906127d8565b602081049091015460ff601f9092166101000a9004161561185757600380546002919060009061183c90849061ffff16612814565b8360ff16600e148015611cdb57508160ff16600a145b8015611cea57508060ff166001145b15611da857826000608c60ff831660108110611d0857611d086127d8565b602081049091015460ff601f9092166101000a900416905060108110611d5e5760405162461bcd60e51b815260206004820152600b60248201526a496e76616c6964206b657960a81b604482015260640161046d565b608f60ff821660108110611d7457611d746127d8565b602081049091015460ff601f9092166101000a90041661185757600380546002919060009061183c90849061ffff16612814565b8360ff16600f148015611dbc575060ff8216155b8015611dcb57508060ff166007145b15611df057609054839060ff90811690608c90831660108110611043576110436127d8565b8360ff16600f148015611e04575060ff8216155b8015611e1357508060ff16600a145b15611ec257826000805b601060ff82161015611ea257608f60ff821660108110611e3f57611e3f6127d8565b602081049091015460ff601f9092166101000a90041615611e9a5780608c60ff851660108110611e7157611e716127d8565b602091828204019190066101000a81548160ff021916908360ff16021790555060019150611ea2565b600101611e1d565b508061185757600380546002919060009061183c90849061ffff1661282e565b8360ff16600f148015611ed857508160ff166001145b8015611ee757508060ff166005145b15611f305782608c60ff821660108110611f0357611f036127d8565b60208104909101546090805460ff191660ff601f9094166101000a90920492909216179055505050505050565b8360ff16600f148015611f4657508160ff166001145b8015611f5557508060ff166008145b15611fa55782608c60ff821660108110611f7157611f716127d8565b6020810491909101546090805461ff001916601f90931661010090810a90920460ff16909102919091179055505050505050565b8360ff16600f148015611fbb57508160ff166001145b8015611fca57508060ff16600e145b156120155782608c60ff821660108110611fe657611fe66127d8565b602081049190910154608d8054601f9093166101000a90910460ff1691600090610ee990849061ffff16612814565b8360ff16600f14801561202b57508160ff166002145b801561203a57508060ff166009145b1561209a57826000608c60ff831660108110612058576120586127d8565b602081049091015460ff601f9092166101000a900416905061207b816005612963565b608d805461ffff191661ffff9290921691909117905550505050505050565b8360ff16600f1480156120b057508160ff166003145b80156120bf57508060ff166003145b156121d457826000608c60ff8316601081106120dd576120dd6127d8565b602081049091015460ff601f9092166101000a9004169050612100606482612980565b608d5460049061ffff16611000811061211b5761211b6127d8565b602091828204019190066101000a81548160ff021916908360ff160217905550600a80826121499190612980565b612153919061288b565b608d546004906121689061ffff166001612814565b61ffff16611000811061217d5761217d6127d8565b602091828204019190066101000a81548160ff021916908360ff160217905550600a816121aa919061288b565b608d546004906121bf9061ffff166002612814565b61ffff1661100081106116cc576116cc6127d8565b8360ff16600f1480156121ea57508160ff166005145b80156121f957508060ff166005145b1561229c578260005b8160ff168160ff161161185757608c60ff821660108110612225576122256127d8565b6020810490910154608d5460ff601f9093166101000a9091048216916004916122549185169061ffff16612814565b61ffff166110008110612269576122696127d8565b602091828204019190066101000a81548160ff021916908360ff1602179055508080612294906129a2565b915050612202565b8360ff16600f1480156122b257508160ff166006145b80156122c157508060ff166005145b15612364578260005b8160ff168160ff161161185757608d546004906122ef9060ff84169061ffff16612814565b61ffff166110008110612304576123046127d8565b602081049091015460ff601f9092166101000a9004811690608c90831660108110612331576123316127d8565b602091828204019190066101000a81548160ff021916908360ff160217905550808061235c906129a2565b9150506122ca565b60405162461bcd60e51b815260206004820152601660248201527513dc18dbd919481b9bdd081a5b5c1b195b595b9d195960521b604482015260640161046d565b608d5460009062010000900461ffff166123f35760405162461bcd60e51b815260206004820152600f60248201526e537461636b20756e646572666c6f7760881b604482015260640161046d565b608d80546001919060029061241390849062010000900461ffff1661282e565b82546101009290920a61ffff818102199093169183160217909155608d54608e9250620100009004166010811061244c5761244c6127d8565b601091828204019190066002029054906101000a900461ffff16905090565b608d5460106201000090910461ffff16106124b95760405162461bcd60e51b815260206004820152600e60248201526d537461636b206f766572666c6f7760901b604482015260640161046d565b608d548190608e9062010000900461ffff16601081106124db576124db6127d8565b601091828204019190066002026101000a81548161ffff021916908361ffff16021790555060016003608a0160028282829054906101000a900461ffff166125239190612814565b92506101000a81548161ffff021916908361ffff16021790555050565b6040518061010001604052806008906020820280368337509192915050565b803561ffff8116811461257157600080fd5b919050565b60006020828403121561258857600080fd5b6125918261255f565b9392505050565b6000602082840312156125aa57600080fd5b5035919050565b6101008101818360005b60088110156125da5781518352602092830192909101906001016125bb565b50505092915050565b600080604083850312156125f657600080fd5b823591506020830135801515811461260d57600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b803560ff8116811461257157600080fd5b60006020828403121561265157600080fd5b813567ffffffffffffffff81111561266857600080fd5b8201601f8101841361267957600080fd5b803567ffffffffffffffff81111561269357612693612618565b8060051b604051601f19603f830116810181811067ffffffffffffffff821117156126c0576126c0612618565b6040529182526020818401810192908101878411156126de57600080fd5b6020850194505b83851015612704576126f68561262e565b8152602094850194016126e5565b509695505050505050565b6000806040838503121561272257600080fd5b823591506127326020840161262e565b90509250929050565b60006020828403121561274d57600080fd5b6125918261262e565b6000806040838503121561276957600080fd5b823591506127326020840161255f565b6000806040838503121561278c57600080fd5b6127958361262e565b91506127326020840161262e565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156127d2576127d26127a3565b92915050565b634e487b7160e01b600052603260045260246000fd5b808201808211156127d2576127d26127a3565b818103818111156127d2576127d26127a3565b61ffff81811683821601908111156127d2576127d26127a3565b61ffff82811682821603908111156127d2576127d26127a3565b60ff81811683821601908111156127d2576127d26127a3565b634e487b7160e01b600052601260045260246000fd5b60008261288657612886612861565b500690565b600060ff83168061289e5761289e612861565b8060ff84160691505092915050565b600061ffff8316806128c1576128c1612861565b8061ffff84160691505092915050565b63ffffffff81811683821602908116908181146128f0576128f06127a3565b5092915050565b63ffffffff81811683821601908111156127d2576127d26127a3565b600063ffffffff83168061292957612929612861565b8063ffffffff84160491505092915050565b600063ffffffff83168061295157612951612861565b8063ffffffff84160691505092915050565b61ffff81811683821602908116908181146128f0576128f06127a3565b600060ff83168061299357612993612861565b8060ff84160491505092915050565b600060ff821660ff81036129b8576129b86127a3565b6001019291505056fea26469706673582212208ad717760df187194020091ca5ca13b8a4be776cf5193c9ea51a8293053ff62164736f6c634300081c0033")] + #[sol(rpc, bytecode="0x610a80604090815260f06080818152609060a081905260c081905260e0818152610100849052602061012081905260606101405261016081905261018081905260706101a0526101c085905260106101e08190526102008690526102208590526102408690526102608690526102808190526102a08690526102c08190526102e08690526103008490526103208490526103408690526103608190526103808190526103a08690526103c08590526103e08690526104008190526104208690526104408690526104608590526104808690526104a08490526104c08690526104e086905261050081905261052091909152610540869052610560959095526105808490526105a08290526105c08490526105e0829052610600849052610620849052610640829052610660849052610680949094526106a08390526106c08390526106e08190526107008390526107208190526107408190526107608490526107808190526107a08490526107c08190526107e08490526108008390526108208290526108408290526108608290526108808390526108a08490526108c08190526108e081905261090052610920929092526109408190526109608290526109808190526109a08290526109c08190526109e0819052610a00829052610a2052610a40819052610a608190526101f9906000906050610292565b5034801561020657600080fd5b506003805461ffff191661020017905560005b605081101561028c57600081605081106102355761023561033a565b602081049091015460ff601f9092166101000a900416600482611000811061025f5761025f61033a565b602091828204019190066101000a81548160ff021916908360ff1602179055508080600101915050610219565b50610350565b6003830191839082156103155791602002820160005b838211156102e657835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026102a8565b80156103135782816101000a81549060ff02191690556001016020816000010492830192600103026102e6565b505b50610321929150610325565b5090565b5b808211156103215760008155600101610326565b634e487b7160e01b600052603260045260246000fd5b612ad08061035f6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c8063997a40c0116100de578063ae344f8e11610097578063d19dc8b511610071578063d19dc8b514610377578063d2bf2e1c14610383578063d826f88f146103a7578063e781d8c5146103af57600080fd5b8063ae344f8e1461034c578063c04062261461035c578063cbc950191461036457600080fd5b8063997a40c0146102e85780639cba24bb146102fb578063a560ea3b14610313578063a72b660414610326578063a8b3ac7814610339578063a95c372d1461034457600080fd5b806368ad83f11161014b5780638153da03116101255780638153da0314610285578063825284fd146102985780638c41bd00146102ab57806392ddeea0146102d557600080fd5b806368ad83f11461023c5780637ef914241461025d57806380bc398e1461027257600080fd5b8063074b6fac146101935780632150c5181461019d5780632f57e5f7146101bb5780633eaf5d9f146101e95780636398efc8146101f157806366050ab914610216575b600080fd5b61019b6103bb565b005b6101a5610440565b6040516101b2919061260d565b60405180910390f35b61019b6101c9366004612658565b608d805461ffff909216620100000263ffff000019909216919091179055565b61019b61049b565b6102046101ff36600461267a565b6104b3565b60405160ff90911681526020016101b2565b61019b610224366004612658565b608d805461ffff191661ffff92909216919091179055565b608d5462010000900461ffff165b60405161ffff90911681526020016101b2565b610265610535565b6040516101b29190612693565b61019b6102803660046126bc565b610571565b61019b610293366004612718565b610611565b61019b6102a63660046127e8565b6106f3565b61019b6102b9366004612814565b6090805460ff9092166101000261ff0019909216919091179055565b61019b6102e336600461282f565b610777565b61019b6102f6366004612852565b610800565b61030361086a565b60405190151581526020016101b2565b61020461032136600461267a565b6108ca565b61024a61033436600461267a565b61092f565b60905460ff16610204565b61024a6109b1565b609054610100900460ff16610204565b61019b610ae3565b61019b6103723660046126bc565b610bb6565b608d5461ffff1661024a565b61019b610391366004612814565b6090805460ff191660ff92909216919091179055565b61019b610c31565b60035461ffff1661024a565b60905460ff16156103f85760908054600191906000906103df90849060ff16612892565b92506101000a81548160ff021916908360ff1602179055505b609054610100900460ff161561043e5760908054600191908290610425908290610100900460ff16612892565b92506101000a81548160ff021916908360ff1602179055505b565b6104486125cf565b6040805161020081019182905290608f90601090826000855b825461010083900a900460ff1615158152602060019283018181049485019490930390920291018084116104615790505050505050905090565b60006104a56109b1565b90506104b081610deb565b50565b600061100082106105055760405162461bcd60e51b815260206004820152601760248201527652414d20696e646578206f7574206f6620626f756e647360481b60448201526064015b60405180910390fd5b6004826110008110610519576105196128b1565b602081049091015460ff601f9092166101000a90041692915050565b61053d6125ee565b604080516101008101918290529060849060089082845b815481526020019060010190808311610554575050505050905090565b61080082106105b85760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b60448201526064016104fc565b80156105e757600160ff83161b6084600884811c9081106105db576105db6128b1565b01805490911790555050565b600160ff83161b196084600884811c908110610605576106056128b1565b01805490911690555050565b80516102009060009061062490836128c7565b90506110008111156106785760405162461bcd60e51b815260206004820152601c60248201527f4461746120746f6f206c6172676520746f2066697420696e2052414d0000000060448201526064016104fc565b815b818110156106e9578361068d84836128da565b8151811061069d5761069d6128b1565b602002602001015160036001018261100081106106bc576106bc6128b1565b602091828204019190066101000a81548160ff021916908360ff160217905550808060010191505061067a565b5050905160915550565b611000821061073e5760405162461bcd60e51b815260206004820152601760248201527652414d20696e646578206f7574206f6620626f756e647360481b60448201526064016104fc565b806004836110008110610753576107536128b1565b602091828204019190066101000a81548160ff021916908360ff1602179055505050565b601082106107c35760405162461bcd60e51b8152602060048201526019602482015278537461636b20696e646578206f7574206f6620626f756e647360381b60448201526064016104fc565b80608e83601081106107d7576107d76128b1565b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055505050565b601060ff8316106108535760405162461bcd60e51b815260206004820152601e60248201527f5620726567697374657220696e646578206f7574206f6620626f756e6473000060448201526064016104fc565b80608c60ff841660108110610753576107536128b1565b60845460009015801561087d5750608554155b80156108895750608654155b80156108955750608754155b80156108a15750608854155b80156108ad5750608954155b80156108b95750608a54155b80156108c55750608b54155b905090565b60006010821061091c5760405162461bcd60e51b815260206004820152601e60248201527f5620726567697374657220696e646578206f7574206f6620626f756e6473000060448201526064016104fc565b608c8260108110610519576105196128b1565b60006010821061097d5760405162461bcd60e51b8152602060048201526019602482015278537461636b20696e646578206f7574206f6620626f756e647360381b60448201526064016104fc565b608e8260108110610990576109906128b1565b601091828204019190066002029054906101000a900461ffff169050919050565b600354600090611000906109ca9061ffff1660016128ed565b61ffff1610610a1b5760405162461bcd60e51b815260206004820152601d60248201527f50726f6772616d20636f756e746572206f7574206f6620626f756e647300000060448201526064016104fc565b60035460009060049061ffff166110008110610a3957610a396128b1565b602081049190910154600354601f9092166101000a900460ff169150600090600490610a6a9061ffff1660016128ed565b61ffff166110008110610a7f57610a7f6128b1565b60208104919091015460038054601f9093166101000a90910460ff169250600884901b62ffff001683179160029190600090610ac090849061ffff166128ed565b92506101000a81548161ffff021916908361ffff16021790555080935050505090565b609154610b265760405162461bcd60e51b8152602060048201526011602482015270050726f6772616d2073697a65206973203607c1b60448201526064016104fc565b60005b6091548110156104b057610b406001611000612907565b60035461ffff918216911610610b985760405162461bcd60e51b815260206004820152601d60248201527f50726f6772616d20636f756e746572206f7574206f6620626f756e647300000060448201526064016104fc565b6000610ba26109b1565b9050610bad81610deb565b50600101610b29565b60108210610bfa5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840d6caf240d2dcc8caf607b1b60448201526064016104fc565b80608f8360108110610c0e57610c0e6128b1565b602091828204019190066101000a81548160ff0219169083151502179055505050565b6003805461ffff191661020017905560005b6008811015610c6b57600060848260088110610c6157610c616128b1565b0155600101610c43565b5060005b6010811015610cba576000608c8260108110610c8d57610c8d6128b1565b602091828204019190066101000a81548160ff021916908360ff1602179055508080600101915050610c6f565b50608d805463ffffffff1916905560005b6010811015610d1b576000608e8260108110610ce957610ce96128b1565b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055508080600101915050610ccb565b5060005b6010811015610d69576000608f8260108110610d3d57610d3d6128b1565b602081049091018054921515601f9092166101000a91820260ff90920219909216179055600101610d1f565b506090805461ffff1916905560005b60508110156104b05760008160508110610d9457610d946128b1565b602081049091015460ff601f9092166101000a9004166004826110008110610dbe57610dbe6128b1565b602091828204019190066101000a81548160ff021916908360ff1602179055508080600101915050610d78565b8061ffff16600003610dfa5750565b600f600c82901c811690600883901c811690600484901c811690841683158015610e25575060ff8316155b8015610e3457508160ff16600e145b8015610e41575060ff8116155b15610e795760005b6008811015610e7157600060848260088110610e6757610e676128b1565b0155600101610e49565b505050505050565b60ff8416158015610e8b575060ff8316155b8015610e9a57508160ff16600e145b8015610ea957508060ff16600e145b15610ed357610eb6612434565b6003805461ffff191661ffff929092169190911790555050505050565b8360ff16600103610efa5750506003805461ffff1916610fff909416939093179092555050565b8360ff16600203610f1b57600354610fff861690610eb69061ffff166124fa565b8360ff16600303610f9a5760ff808616908190608c90861660108110610f4357610f436128b1565b602081049091015460ff601f9092166101000a90041603610e71576003805460029190600090610f7890849061ffff166128ed565b92506101000a81548161ffff021916908361ffff160217905550505050505050565b8360ff16600403610ff75760ff808616908190608c90861660108110610fc257610fc26128b1565b602081049091015460ff601f9092166101000a90041614610e71576003805460029190600090610f7890849061ffff166128ed565b8360ff16600514801561100b575060ff8116155b156110aa57608c60ff831660108110611026576110266128b1565b602081049091015460ff601f9092166101000a9004811690608c90851660108110611053576110536128b1565b602081049091015460ff601f9092166101000a900416036110a357600380546002919060009061108890849061ffff166128ed565b92506101000a81548161ffff021916908361ffff1602179055505b5050505050565b8360ff166006036110fa5760ff808616908190608c908616601081106110d2576110d26128b1565b602091828204019190066101000a81548160ff021916908360ff160217905550505050505050565b8360ff166007036111655760ff808616908190608c90861660108110611122576111226128b1565b602091828204019190068282829054906101000a900460ff166111459190612921565b92506101000a81548160ff021916908360ff160217905550505050505050565b8360ff166008148015611179575060ff8116155b156111e857608c60ff831660108110611194576111946128b1565b602081049091015460ff601f9092166101000a9004811690608c908516601081106111c1576111c16128b1565b602091828204019190066101000a81548160ff021916908360ff1602179055505050505050565b8360ff1660081480156111fe57508060ff166001145b1561127f57608c60ff831660108110611219576112196128b1565b602081049091015460ff601f9092166101000a9004811690608c90851660108110611246576112466128b1565b602091828204019190068282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505050505050565b8360ff16600814801561129557508060ff166002145b1561130f57608c60ff8316601081106112b0576112b06128b1565b602081049091015460ff601f9092166101000a9004811690608c908516601081106112dd576112dd6128b1565b602081049091018054601f9092166101000a80830490931660ff90811684029302199091169190911790555050505050565b8360ff16600814801561132557508060ff166003145b1561139f57608c60ff831660108110611340576113406128b1565b602081049091015460ff601f9092166101000a9004811690608c9085166010811061136d5761136d6128b1565b60208104909101805460ff601f9093166101000a80820484169094188316840292909302199092161790555050505050565b8360ff1660081480156113b557508060ff166004145b1561148f5782826000608c60ff8316601081106113d4576113d46128b1565b602081049091015460ff601f9092166101000a9004811690608c90851660108110611401576114016128b1565b6020810491909101546114209291601f166101000a900460ff166128ed565b905060ff8161ffff1611611435576000611438565b60015b608c805460ff60781b1916600160781b60ff938416021781558291851660108110611465576114656128b1565b602091828204019190066101000a81548160ff021916908360ff1602179055505050505050505050565b8360ff1660081480156114a557508060ff166005145b156115a3578282608c60ff8216601081106114c2576114c26128b1565b602081049091015460ff601f9092166101000a9004811690608c908416601081106114ef576114ef6128b1565b602081049091015460ff601f9092166101000a9004161015611512576000611515565b60015b608c805460ff60781b1916600160781b60ff9384160217815590821660108110611541576115416128b1565b602081049091015460ff601f9092166101000a9004811690608c9084166010811061156e5761156e6128b1565b60208104909101805460ff601f9093166101000a80820484169490940383168402929093021990921617905550505050505050565b8360ff1660081480156115b957508060ff166006145b1561164c5782608c60ff8216601081106115d5576115d56128b1565b602081049190910154608c805460ff60781b19166001601f9094166101000a9092048316600160781b0291909117815560ff831660108110611619576116196128b1565b60208104909101805460ff601f9093166101000a808204841690941c831684029290930219909216179055505050505050565b8360ff16600814801561166257508060ff166007145b15611784578282608c60ff83166010811061167f5761167f6128b1565b602081049091015460ff601f9092166101000a9004811690608c908316601081106116ac576116ac6128b1565b602081049091015460ff601f9092166101000a90041610156116cf5760006116d2565b60015b608c805460ff60781b1916600160781b60ff93841602178155908316601081106116fe576116fe6128b1565b602081049091015460ff601f9092166101000a9004811690608c9083166010811061172b5761172b6128b1565b602091828204019190069054906101000a900460ff160360036089018360ff166010811061175b5761175b6128b1565b602091828204019190066101000a81548160ff021916908360ff16021790555050505050505050565b8360ff16600814801561179a57508060ff16600e145b1561183857826007608c60ff8316601081106117b8576117b86128b1565b602081049190910154608c805460ff60781b1916601f9093166101000a90910460ff90811690931c6001908116600160781b029290921781559091831660108110611805576118056128b1565b60208104909101805460ff601f9093166101000a808204841690941b831684029290930219909216179055505050505050565b8360ff16600914801561184c575060ff8116155b156118ef578282608c60ff821660108110611869576118696128b1565b602081049091015460ff601f9092166101000a9004811690608c90841660108110611896576118966128b1565b602081049091015460ff601f9092166101000a900416146118e65760038054600291906000906118cb90849061ffff166128ed565b92506101000a81548161ffff021916908361ffff1602179055505b50505050505050565b8360ff16600a03611916575050608d805461ffff1916610fff909416939093179092555050565b8360ff16600b0361195657608c54610fff86169061193890829060ff166128ed565b6003805461ffff191661ffff92909216919091179055505050505050565b8360ff16600c036119ed578260ff86166000610100426119776001436128da565b6003546040516119af9392409161ffff1690602001928352602083019190915260f01b6001600160f01b031916604082015260420190565b6040516020818303038152906040528051906020012060001c6119d29190612950565b9050818116608c60ff851660108110611465576114656128b1565b8360ff16600d03611c705760006040608c60ff861660108110611a1257611a126128b1565b602091828204019190069054906101000a900460ff16611a329190612964565b905060006020608c60ff861660108110611a4e57611a4e6128b1565b602091828204019190069054906101000a900460ff16611a6e9190612964565b608c805460ff60781b1916905590508260005b8160ff168160ff161015611c6557608d54600090600490611aaa9060ff85169061ffff166128ed565b61ffff166110008110611abf57611abf6128b1565b602081049091015460ff601f9092166101000a900416905060005b60088160ff161015611c5b576000611af3826007612892565b60ff168360ff16901c6001169050600060408389611b119190612921565b60ff16611b1e9190612986565b61ffff16905060006020611b32878a612921565b60ff16611b3f9190612986565b61ffff169050600082611b536040846129aa565b611b5d91906129d0565b90506000611b6d610100836129ec565b63ffffffff1690506000611b8361010084612a14565b63ffffffff1690506000611b988260ff6128da565b60848460088110611bab57611bab6128b1565b01546001911c8116158015925060ff8916909114821415908290611bcd575080155b15611be657608c805460ff60781b1916600160781b1790555b8015611c1b57611bf78360ff6128da565b6001901b60848560088110611c0e57611c0e6128b1565b0180549091179055611c47565b611c268360ff6128da565b6001901b1960848560088110611c3e57611c3e6128b1565b01805490911690555b505060019096019550611ada945050505050565b5050600101611a81565b505050505050505050565b8360ff16600e148015611c8657508160ff166009145b8015611c9557508060ff16600e145b15611d5457826000608c60ff831660108110611cb357611cb36128b1565b602081049091015460ff601f9092166101000a900416905060108110611d095760405162461bcd60e51b815260206004820152600b60248201526a496e76616c6964206b657960a81b60448201526064016104fc565b608f60ff821660108110611d1f57611d1f6128b1565b602081049091015460ff601f9092166101000a900416156118e65760038054600291906000906118cb90849061ffff166128ed565b8360ff16600e148015611d6a57508160ff16600a145b8015611d7957508060ff166001145b15611e3757826000608c60ff831660108110611d9757611d976128b1565b602081049091015460ff601f9092166101000a900416905060108110611ded5760405162461bcd60e51b815260206004820152600b60248201526a496e76616c6964206b657960a81b60448201526064016104fc565b608f60ff821660108110611e0357611e036128b1565b602081049091015460ff601f9092166101000a9004166118e65760038054600291906000906118cb90849061ffff166128ed565b8360ff16600f148015611e4b575060ff8216155b8015611e5a57508060ff166007145b15611e7f57609054839060ff90811690608c908316601081106110d2576110d26128b1565b8360ff16600f148015611e93575060ff8216155b8015611ea257508060ff16600a145b15611f5157826000805b601060ff82161015611f3157608f60ff821660108110611ece57611ece6128b1565b602081049091015460ff601f9092166101000a90041615611f295780608c60ff851660108110611f0057611f006128b1565b602091828204019190066101000a81548160ff021916908360ff16021790555060019150611f31565b600101611eac565b50806118e65760038054600291906000906118cb90849061ffff16612907565b8360ff16600f148015611f6757508160ff166001145b8015611f7657508060ff166005145b15611fbf5782608c60ff821660108110611f9257611f926128b1565b60208104909101546090805460ff191660ff601f9094166101000a90920492909216179055505050505050565b8360ff16600f148015611fd557508160ff166001145b8015611fe457508060ff166008145b156120345782608c60ff821660108110612000576120006128b1565b6020810491909101546090805461ff001916601f90931661010090810a90920460ff16909102919091179055505050505050565b8360ff16600f14801561204a57508160ff166001145b801561205957508060ff16600e145b156120a45782608c60ff821660108110612075576120756128b1565b602081049190910154608d8054601f9093166101000a90910460ff1691600090610f7890849061ffff166128ed565b8360ff16600f1480156120ba57508160ff166002145b80156120c957508060ff166009145b1561212957826000608c60ff8316601081106120e7576120e76128b1565b602081049091015460ff601f9092166101000a900416905061210a816005612a3c565b608d805461ffff191661ffff9290921691909117905550505050505050565b8360ff16600f14801561213f57508160ff166003145b801561214e57508060ff166003145b1561226357826000608c60ff83166010811061216c5761216c6128b1565b602081049091015460ff601f9092166101000a900416905061218f606482612a59565b608d5460049061ffff1661100081106121aa576121aa6128b1565b602091828204019190066101000a81548160ff021916908360ff160217905550600a80826121d89190612a59565b6121e29190612964565b608d546004906121f79061ffff1660016128ed565b61ffff16611000811061220c5761220c6128b1565b602091828204019190066101000a81548160ff021916908360ff160217905550600a816122399190612964565b608d5460049061224e9061ffff1660026128ed565b61ffff16611000811061175b5761175b6128b1565b8360ff16600f14801561227957508160ff166005145b801561228857508060ff166005145b1561232b578260005b8160ff168160ff16116118e657608c60ff8216601081106122b4576122b46128b1565b6020810490910154608d5460ff601f9093166101000a9091048216916004916122e39185169061ffff166128ed565b61ffff1661100081106122f8576122f86128b1565b602091828204019190066101000a81548160ff021916908360ff160217905550808061232390612a7b565b915050612291565b8360ff16600f14801561234157508160ff166006145b801561235057508060ff166005145b156123f3578260005b8160ff168160ff16116118e657608d5460049061237e9060ff84169061ffff166128ed565b61ffff166110008110612393576123936128b1565b602081049091015460ff601f9092166101000a9004811690608c908316601081106123c0576123c06128b1565b602091828204019190066101000a81548160ff021916908360ff16021790555080806123eb90612a7b565b915050612359565b60405162461bcd60e51b815260206004820152601660248201527513dc18dbd919481b9bdd081a5b5c1b195b595b9d195960521b60448201526064016104fc565b608d5460009062010000900461ffff166124825760405162461bcd60e51b815260206004820152600f60248201526e537461636b20756e646572666c6f7760881b60448201526064016104fc565b608d8054600191906002906124a290849062010000900461ffff16612907565b82546101009290920a61ffff818102199093169183160217909155608d54608e925062010000900416601081106124db576124db6128b1565b601091828204019190066002029054906101000a900461ffff16905090565b608d5460106201000090910461ffff16106125485760405162461bcd60e51b815260206004820152600e60248201526d537461636b206f766572666c6f7760901b60448201526064016104fc565b608d548190608e9062010000900461ffff166010811061256a5761256a6128b1565b601091828204019190066002026101000a81548161ffff021916908361ffff16021790555060016003608a0160028282829054906101000a900461ffff166125b291906128ed565b92506101000a81548161ffff021916908361ffff16021790555050565b6040518061020001604052806010906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b6102008101818360005b60108110156126385781511515835260209283019290910190600101612617565b50505092915050565b803561ffff8116811461265357600080fd5b919050565b60006020828403121561266a57600080fd5b61267382612641565b9392505050565b60006020828403121561268c57600080fd5b5035919050565b6101008101818360005b600881101561263857815183526020928301929091019060010161269d565b600080604083850312156126cf57600080fd5b82359150602083013580151581146126e657600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b803560ff8116811461265357600080fd5b60006020828403121561272a57600080fd5b813567ffffffffffffffff81111561274157600080fd5b8201601f8101841361275257600080fd5b803567ffffffffffffffff81111561276c5761276c6126f1565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715612799576127996126f1565b6040529182526020818401810192908101878411156127b757600080fd5b6020850194505b838510156127dd576127cf85612707565b8152602094850194016127be565b509695505050505050565b600080604083850312156127fb57600080fd5b8235915061280b60208401612707565b90509250929050565b60006020828403121561282657600080fd5b61267382612707565b6000806040838503121561284257600080fd5b8235915061280b60208401612641565b6000806040838503121561286557600080fd5b61286e83612707565b915061280b60208401612707565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156128ab576128ab61287c565b92915050565b634e487b7160e01b600052603260045260246000fd5b808201808211156128ab576128ab61287c565b818103818111156128ab576128ab61287c565b61ffff81811683821601908111156128ab576128ab61287c565b61ffff82811682821603908111156128ab576128ab61287c565b60ff81811683821601908111156128ab576128ab61287c565b634e487b7160e01b600052601260045260246000fd5b60008261295f5761295f61293a565b500690565b600060ff8316806129775761297761293a565b8060ff84160691505092915050565b600061ffff83168061299a5761299a61293a565b8061ffff84160691505092915050565b63ffffffff81811683821602908116908181146129c9576129c961287c565b5092915050565b63ffffffff81811683821601908111156128ab576128ab61287c565b600063ffffffff831680612a0257612a0261293a565b8063ffffffff84160491505092915050565b600063ffffffff831680612a2a57612a2a61293a565b8063ffffffff84160691505092915050565b61ffff81811683821602908116908181146129c9576129c961287c565b600060ff831680612a6c57612a6c61293a565b8060ff84160491505092915050565b600060ff821660ff8103612a9157612a9161287c565b6001019291505056fea264697066735822122034e21477a46241e17af5dc45f2d42b68b59c4f7dc5bbe9f5c33c643968f0a05464736f6c634300081c0033")] contract Emu { // ------------------------------------------------------------------------- // Constants @@ -616,6 +616,10 @@ sol! { function getPC() public view returns (uint16) { return emu.pc; } + + function getKeys() public view returns(bool[16] memory){ + return emu.keys; + } function getRAMValueAt(uint256 index) public view returns (uint8) { require(index < RAM_SIZE, "RAM index out of bounds"); @@ -777,8 +781,14 @@ async fn main() { let builder = chip8.keypress(U256::from(k), true); builder.call().await.unwrap(); - let tx = builder.send().await.unwrap(); - println!("⭐️ key {:?} down tx: {:?}", key, tx); + let keys = chip8.getKeys().call().await.unwrap(); + println!("keys: {:?}", keys._0); + + if !keys._0[k]{ + let tx = builder.send().await.unwrap(); + println!("⭐️ key {:?} down tx: {:?}", key, tx); + } + } } Event::KeyUp { @@ -788,8 +798,13 @@ async fn main() { let builder = chip8.keypress(U256::from(k), false); builder.call().await.unwrap(); - let tx = builder.send().await.unwrap(); - println!("⭐️ key {:?} up tx: {:?}", key, tx); + let keys = chip8.getKeys().call().await.unwrap(); + println!("keys: {:?}", keys._0); + + if keys._0[k]{ + let tx = builder.send().await.unwrap(); + println!("⭐️ key {:?} up tx: {:?}", key, tx); + } } } _ => (), @@ -806,6 +821,9 @@ async fn main() { let pc = chip8.getPC().call().await.unwrap(); println!("PC: {:?}", pc._0); + + let keys = chip8.getKeys().call().await.unwrap(); + println!("keys: {:?}", keys._0); chip8.tickTimers().call().await.unwrap(); draw_screen(&chip8, &mut canvas).await; diff --git a/src/Emu.sol b/src/Emu.sol index 702c80a..6ac9954 100644 --- a/src/Emu.sol +++ b/src/Emu.sol @@ -588,6 +588,10 @@ contract Emu { return emu.pc; } + function getKeys() public view returns (bool[16] memory) { + return emu.keys; + } + function getRAMValueAt(uint256 index) public view returns (uint8) { require(index < RAM_SIZE, "RAM index out of bounds"); return emu.ram[index];