From e75ea9af14713b8f23b849d6bf0e2ccbc0bddd8b Mon Sep 17 00:00:00 2001 From: Bohdan Ohorodnii Date: Sun, 3 Nov 2024 00:37:05 +0200 Subject: [PATCH] feat(blockifier): add `get_execution_info_v1` syscall --- ...est_contract_execution_info_v1.sierra.json | 900 ++++++++++++++++++ .../test_contract_execution_info_v1.cairo | 58 ++ .../deprecated_syscalls/hint_processor.rs | 3 +- .../src/execution/execution_utils.rs | 9 - .../src/execution/native/syscall_handler.rs | 63 +- .../src/execution/syscalls/hint_processor.rs | 3 +- .../syscall_tests/get_execution_info.rs | 26 + crates/blockifier/src/test_utils/contracts.rs | 20 + crates/blockifier/src/transaction/objects.rs | 7 + 9 files changed, 1074 insertions(+), 15 deletions(-) create mode 100644 crates/blockifier/feature_contracts/cairo_native/compiled/test_contract_execution_info_v1.sierra.json create mode 100644 crates/blockifier/feature_contracts/cairo_native/test_contract_execution_info_v1.cairo diff --git a/crates/blockifier/feature_contracts/cairo_native/compiled/test_contract_execution_info_v1.sierra.json b/crates/blockifier/feature_contracts/cairo_native/compiled/test_contract_execution_info_v1.sierra.json new file mode 100644 index 0000000000..0c653fe3c6 --- /dev/null +++ b/crates/blockifier/feature_contracts/cairo_native/compiled/test_contract_execution_info_v1.sierra.json @@ -0,0 +1,900 @@ +{ + "sierra_program": [ + "0x1", + "0x6", + "0x0", + "0x2", + "0x8", + "0x0", + "0x17a", + "0x86", + "0x44", + "0x52616e6765436865636b", + "0x800000000000000100000000000000000000000000000000", + "0x436f6e7374", + "0x800000000000000000000000000000000000000000000002", + "0x1", + "0x1a", + "0x2", + "0x4f7074696f6e3a3a756e77726170206661696c65642e", + "0x7533325f737562204f766572666c6f77", + "0x496e646578206f7574206f6620626f756e6473", + "0x18", + "0x0", + "0x53455155454e4345525f4d49534d41544348", + "0x54585f494e464f5f56455253494f4e5f4d49534d41544348", + "0x4143434f554e545f435f414444524553535f4d49534d41544348", + "0x54585f494e464f5f484153485f4d49534d41544348", + "0x54585f494e464f5f434841494e5f49445f4d49534d41544348", + "0x54585f494e464f5f4e4f4e43455f4d49534d41544348", + "0x43414c4c45525f4d49534d41544348", + "0x434f4e54524143545f4d49534d41544348", + "0x53454c4543544f525f4d49534d41544348", + "0x54585f494e464f5f5349474e41545552455f4d49534d41544348", + "0x537472756374", + "0x800000000000000f00000000000000000000000000000001", + "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", + "0x456e756d", + "0x800000000000000700000000000000000000000000000003", + "0x3288d594b9a45d15bb2fcb7903f06cdb06b27f0ba88186ec4cfaa98307cb972", + "0xf", + "0x4172726179", + "0x800000000000000300000000000000000000000000000001", + "0x536e617073686f74", + "0x800000000000000700000000000000000000000000000001", + "0x11", + "0x800000000000000700000000000000000000000000000002", + "0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62", + "0x12", + "0x800000000000000700000000000000000000000000000004", + "0x13", + "0x10", + "0x16a4c8d7c05909052238a862d8cc3e7975bf05a07b3a69c6b28951083a6d672", + "0x800000000000000300000000000000000000000000000003", + "0x15", + "0x45b67c75542d42836cef6c02cca4dbff4a80a8621fa521cbfff1b2dd4af35a", + "0x14", + "0x16", + "0x753332", + "0x800000000000000700000000000000000000000000000000", + "0x54585f494e464f5f4d41585f4645455f4d49534d41544348", + "0x66656c74323532", + "0x4e6f6e5a65726f", + "0x424c4f434b5f54494d455354414d505f4d49534d41544348", + "0x424c4f434b5f4e554d4245525f4d49534d41544348", + "0x753634", + "0x436f6e747261637441646472657373", + "0x3808c701a5d13e100ab11b6c02f91f752ecae7e420d21b56c90ec0a475cc7e5", + "0x1e", + "0x1f", + "0x426f78", + "0x3c", + "0x20", + "0x800000000000000700000000000000000000000000000006", + "0x19367431bdedfe09ea99eed9ade3de00f195dd97087ed511b8942ebb45dbc5a", + "0x22", + "0x21", + "0x23", + "0x556e696e697469616c697a6564", + "0x800000000000000200000000000000000000000000000001", + "0x53797374656d", + "0x26", + "0x1d49f7a4b277bf7b55a2664ce8cef5d6922b5ffb806b89644b9e0cdbbcac378", + "0x29", + "0x13fdd7105045794a99550ae1c4ac13faa62610dfab62c16422bfcf5803baa6e", + "0x2a", + "0x75313238", + "0x4661696c656420746f20646573657269616c697a6520706172616d202331", + "0x4661696c656420746f20646573657269616c697a6520706172616d202332", + "0x4661696c656420746f20646573657269616c697a6520706172616d202333", + "0x4661696c656420746f20646573657269616c697a6520706172616d202334", + "0x4661696c656420746f20646573657269616c697a6520706172616d202335", + "0x4661696c656420746f20646573657269616c697a6520706172616d202336", + "0x4661696c656420746f20646573657269616c697a6520706172616d202337", + "0x4f7574206f6620676173", + "0x800000000000000f00000000000000000000000000000002", + "0xcc5e86243f861d2d64b08c35db21013e773ac5cf10097946fe0011304886d5", + "0x36", + "0x371a38276a14d2475f9072073e9ab9b154a40bb41edce5be7d1ade8ccbeb2e4", + "0x4275696c74696e436f737473", + "0x9931c641b913035ae674b400b61a51476d506bbe8bba2ff8a6272790aba9e6", + "0x35", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x800000000000000700000000000000000000000000000008", + "0x2e655a7513158873ca2e5e659a9e175d23bf69a2325cdd0397ca3b8d864b967", + "0x2c", + "0x109c59bf70ce1d096631b005c20ec90d752446fc0fd825dac0e61dd34c3af50", + "0x3d", + "0x12635a64ec5093a14e1239a44eef43a4a94ce4403a075c9e94b6ef456572cda", + "0x3e", + "0x11c6d8087e00642489f92d2821ad6ebd6532ad1a3b6d12833da6d6810391511", + "0x29d7d57c04a880978e7b3689f6218e507f3be17588744b58dc17762447ad0e7", + "0x41", + "0x4761734275696c74696e", + "0x9f", + "0x7265766f6b655f61705f747261636b696e67", + "0x77697468647261775f676173", + "0x6272616e63685f616c69676e", + "0x7374727563745f6465636f6e737472756374", + "0x656e61626c655f61705f747261636b696e67", + "0x73746f72655f74656d70", + "0x61727261795f736e617073686f745f706f705f66726f6e74", + "0x656e756d5f696e6974", + "0x42", + "0x6a756d70", + "0x7374727563745f636f6e737472756374", + "0x656e756d5f6d61746368", + "0x756e626f78", + "0x72656e616d65", + "0x7536345f7472795f66726f6d5f66656c74323532", + "0x40", + "0x21adb5788e32c84f69a1863d85ef9394b7bf761a0ce1190f826984e5075c371", + "0x66756e6374696f6e5f63616c6c", + "0x3", + "0x3f", + "0x64697361626c655f61705f747261636b696e67", + "0x64726f70", + "0x61727261795f6e6577", + "0x636f6e73745f61735f696d6d656469617465", + "0x3b", + "0x61727261795f617070656e64", + "0x3a", + "0x43", + "0x6765745f6275696c74696e5f636f737473", + "0x39", + "0x77697468647261775f6761735f616c6c", + "0x38", + "0x736e617073686f745f74616b65", + "0x37", + "0x34", + "0x33", + "0x32", + "0x31", + "0x30", + "0x2f", + "0x2e", + "0x2d", + "0x647570", + "0x75313238735f66726f6d5f66656c74323532", + "0x2b", + "0x616c6c6f635f6c6f63616c", + "0x66696e616c697a655f6c6f63616c73", + "0x6765745f657865637574696f6e5f696e666f5f73797363616c6c", + "0x24", + "0x73746f72655f6c6f63616c", + "0x7536345f6571", + "0x28", + "0x1d", + "0x1c", + "0x636f6e74726163745f616464726573735f746f5f66656c74323532", + "0x66656c743235325f737562", + "0x66656c743235325f69735f7a65726f", + "0x753132385f6571", + "0x19", + "0x61727261795f6c656e", + "0x7533325f6571", + "0x4", + "0x17", + "0xe", + "0x1b", + "0xd", + "0xc", + "0xb", + "0xa", + "0x9", + "0x8", + "0x7", + "0x6", + "0x5", + "0x25", + "0x27", + "0x7533325f7472795f66726f6d5f66656c74323532", + "0x61727261795f736c696365", + "0x7533325f6f766572666c6f77696e675f737562", + "0x50a", + "0xffffffffffffffff", + "0x16d", + "0x15c", + "0x158", + "0x146", + "0x141", + "0x12e", + "0x128", + "0x11d", + "0x10a", + "0x4f", + "0x45", + "0x46", + "0x47", + "0x54", + "0x48", + "0x49", + "0x4a", + "0xf6", + "0x4b", + "0x4c", + "0x4d", + "0x5e", + "0x4e", + "0x50", + "0x51", + "0x52", + "0x53", + "0x63", + "0x55", + "0x56", + "0xe1", + "0x57", + "0x58", + "0x59", + "0x6d", + "0x5a", + "0x5b", + "0x5c", + "0x5d", + "0x5f", + "0x72", + "0x60", + "0x61", + "0x62", + "0xcb", + "0x64", + "0x65", + "0x8c", + "0x66", + "0x67", + "0x68", + "0x69", + "0x6a", + "0x6b", + "0x6c", + "0x6e", + "0x6f", + "0xb6", + "0x70", + "0x71", + "0x73", + "0x74", + "0x75", + "0x76", + "0x77", + "0x78", + "0x79", + "0xaf", + "0x7a", + "0x7b", + "0x7c", + "0x7d", + "0x7e", + "0x7f", + "0x80", + "0x81", + "0x82", + "0x83", + "0x84", + "0x85", + "0x86", + "0x87", + "0x88", + "0x89", + "0x8a", + "0x8b", + "0x8d", + "0x8e", + "0x8f", + "0x90", + "0x91", + "0x92", + "0x93", + "0x94", + "0x95", + "0x96", + "0x97", + "0x98", + "0x99", + "0x9a", + "0x9b", + "0x9c", + "0x9d", + "0x9e", + "0xa0", + "0xa1", + "0x134", + "0xa2", + "0xa3", + "0xa4", + "0xa5", + "0xa6", + "0xa7", + "0xa8", + "0x14b", + "0xa9", + "0xaa", + "0xab", + "0xac", + "0xad", + "0xae", + "0x160", + "0xb0", + "0xb1", + "0xb2", + "0xb3", + "0xb4", + "0xb5", + "0xb7", + "0xb8", + "0xb9", + "0xba", + "0xbb", + "0x184", + "0x189", + "0x24b", + "0x193", + "0x198", + "0x240", + "0x23b", + "0x1a6", + "0x1ab", + "0x230", + "0x229", + "0x221", + "0x217", + "0x1c4", + "0x1c9", + "0x20b", + "0x1d3", + "0x1d8", + "0x1fe", + "0x1e2", + "0x1e7", + "0x1f1", + "0x235", + "0x245", + "0x422", + "0x28b", + "0x2a7", + "0x409", + "0x3e9", + "0x3cb", + "0x2de", + "0x2fa", + "0x316", + "0x3b8", + "0x322", + "0x3a0", + "0x38a", + "0x376", + "0x364", + "0x354", + "0x346", + "0x440", + "0x445", + "0x497", + "0x48e", + "0x481", + "0x472", + "0x466", + "0x4fc", + "0x4ad", + "0x4b2", + "0x4f1", + "0x4be", + "0x4c3", + "0x4e0", + "0x4d5", + "0x17b", + "0x253", + "0x439", + "0x4a1", + "0x2ab2", + "0x300e0b02810060a038180a04018240e06028100608038180a04018080200", + "0x1408030801c0c050200c1e070301408030701c0c050200c1a07030140803", + "0x540e06028100614038180a040184c0e06028100612038180a04018440e06", + "0x5c4405108800c050f8783a050e814380c0d868320c0c05c2c07030140803", + "0x880a2b02864182a0b8a418180b8a00a270289c0a19060982e25028901823", + "0x1c0c050200c0c05108cc60321881c0c050200c602f170145a0516030541a", + "0x84763c02884763a028e40a39028e018260b8c06e301b0d40e06028100634", + "0x10c04451d014884321014423b0301474051d0148205200147e0c1f05c7a05", + "0x124182a0d1200a2702864181b0b8740a270291c181b0d0180a44219180a44", + "0x1408032701c0c050200c9a070301408032601c0c050200c604b170149405", + "0x14c0e06028100652038180a04019440e06028100650038180a040193c0e06", + "0x6860582b830301717014ac052a830541a0e814320c2a05c4e050c8304617", + "0x180a27029780a3a028180a5d061702e5b038180a04018b80a5a02964182a", + "0x14c40530830541a300144e050c83036170e81478052f830361a030140c05", + "0x1a4186833808cc1d029940a640606c340602884761d028180a630606c342e", + "0x940a05368300e700281cde0602814dc0c02814da0c3609c0a0535830d40c", + "0x140a75030140a74380140a730281ce005039bc3a05029c81871380140a6d", + "0x1dc0a05398140e770281cde7702814da0c039dc0a0737830ec0602814da06", + "0x1f0c005029ccc405029acf605029cc0a7a029e44e05029b44e05029c81878", + "0x14fc3902814fa3a02814fa3c02814fa0602814fa6502814fa2502814fa0c", + "0x140a6d0281d0405039bc5c05029c85605029c80c0502a050005029fc0c05", + "0x14fa8702815108702814e40c432140a0536831088202814da4602814da83", + "0x220ac05029f51205029cc0e7a029e47805029b47405029b47205029b50e05", + "0x14fe1d02814fa8a02814fe0c03a080a07379680a05390880a053e8880a05", + "0x1fd2005029fd1e05029fd1c05029fc4e05029f51a05029fd1805029fd1605", + "0x14e44802814e64a02814d69402814e67a3d014f20c498940a05492440a05", + "0x1bcbc05029f4f605029b418073d8140e6f310140a720601cc005039bc7805", + "0x312e0c4b0e80a054a9180a054a8180a054a8140e7b0281cde05039800a07", + "0x140a991e8140a6b1e8140a74200140a6d210140a6b210140a744c0140a6d", + "0x2700a053f9040a053ea6c0a053e831340602815323a02815324102814da46", + "0x140a6b1e0140a7406280189f062793a05029fd1205029b40a07448140e6f", + "0x14f20c5202c0a05368180a055189c0a05492880a053f831425e02814da3c", + "0x1d1205039bcac05029c94e05029fc5005029cc5a05029ad4c05029cd4a7a", + "0x14fead02814feac02814feab02814feaa02814fea902814fea802814fa0c", + "0x140a7f062d16605029f56405029f56205029fd6005029fd5e05029fd5c05", + "0x300e940281cde4a02814e40c039200a07378316c06028156a0b0281524a5", + "0x1c9005039bc0e05029fc1605029f40a074a0140e6f3d0140a7f4a0140a6d", + "0x1cde0502814fea602814da0c03a980a07378b40a05390300e280281cde05", + "0x2c54a075c01c0a0c03814180c5c014180c062dc0a07140140e6f0281d4c05", + "0x15620c062e00a0c528315c055c014f4053d03018b8028300e0c57ac00eb9", + "0x2b00aaf0603170050601c18ab02aa958ad03ae00eae02ac018a502ae00aa5", + "0x30182202831580c538157005550155a0c548157005568155c0c550157005", + "0x157005558155c0c1401570050e815540c0e8157005062ac180c5c0141807", + "0x3018b8028300e0c12815742202ae00ea702aa418a702ae00a2802ab418a9", + "0x2940e22060b40ab8028b40a28060b40ab80289c0a1d0609c0ab8028880aa7", + "0x2a40ab0060ac0ab8028ac0ab10603170050601c18a602aec5c2b03ae00e2d", + "0x1416055703150055c01544055783018b8028300e0c0301474a20581d7007", + "0x1418ab0603170050601c180c4c01418ac062700ab802aa00aad062740ab8", + "0x2700ab8028e80aad062740ab8028180aae060e80ab8028e40aaa060e40ab8", + "0x74184002ae00a3d02a9c180c5c0141807061040abc1e81570074e015520c", + "0x1180abd592600eb80390856071103084055c01484051403084055c0148005", + "0x3090054526d66075c01d3a055803130055c01530055883018b8028300e0c", + "0x2e00a9402894189402ae00a4a02874184a02ae00a9b02a9c180c5c0141807", + "0x300e0c062140a0c5603120055c014bc051383122055c015660557030bc05", + "0x3122055c0149005570311c055c0151e05168311e055c01418ab060317005", + "0x1c5c0c062e00a0c0383118055f2340ab803a400a2b062400ab802a380a27", + "0x15620c2b0157005488154c0c062e00a0c03830b4055fa2916075c01d1a98", + "0x21c0a060621d12075c014ac8b03a88185602ae00a560282c188b02ae00a8b", + "0x1c78054e830788003ae00a8502aa0180c5c0141807062080ac0428157007", + "0x1d70073d815600c3d815700540014f40c062e00a0c03830c405609800ab8", + "0xab802a0c0a1d0620c0ab8029940aa70603170050601c187002b08ca77", + "0x31580c628157005618144e0c6201570053b8155c0c618157005000144a0c", + "0x155c0c640157005638145a0c638157005062ac180c5c0141807060318c05", + "0x300e0c6581594c902ae00ec5028ac18c502ae00ac80289c18c402ae00a70", + "0x2e00acd02a9c180c5c01418070633c0ace66b300eb803b100ab0060317005", + "0x31a4055c015980557031a2055c015a00512831a0055c01584050e8318405", + "0x318c055c01418ab0603170050601c180c6a01418ac0634c0ab802b440a27", + "0x34c0a2b0634c0ab802b540a27063480ab802b3c0aae063540ab802b180a2d", + "0x1c18dc02b6db4d903ae00ed202ac0180c5c0141807063600ad76b0157007", + "0x1570056f0144a0c6f01570056e8143a0c6e81570056d0154e0c062e00a0c", + "0x14180706031c205062b018e002ae00adf0289c18ce02ae00ad902ab818df", + "0x9c18ce02ae00adc02ab818e302ae00ae2028b418e202ae00a0c5583018b8", + "0x3380ab00603170050601c18d402b95c8055c01dc00515831c0055c015c605", + "0x31700573014720c062e00a0c4e03018b8028300e0c74815d0e77301d7007", + "0x2e00ac9028f4180c5c015ac051e83018b802b900a3d06031700573814740c", + "0x145c052103018b802ac80a4206031700545014800c062e00a6002904180c", + "0x1c8c0c75815700575814500c758157005062c818ea02ae00a0c4c03018b8", + "0x15dc0524031dc055c015d8ed03a6c18ed02ae00a0c59831d8055c015d6ea", + "0x1c0ab80281c0a94062c40ab802ac40a4a062240ab802a240ab1063bc0ab8", + "0x31700574814720c062e00a0c03831de0758a254a0577815700577814bc0c", + "0x3c9e2f003ae00edb58a24f48f0636c0ab802b6c0a900636c0ab802831220c", + "0x15c20546831c2055c014188e06031700506270180c5c0141807063d1e607", + "0x3c40ab802bc40a4a063c00ab802bc00ab10603170057a815180c7b3d40eb8", + "0x15140c59015700559015160c17015700517015160c03815700503815280c", + "0x2e00ad6028a018c902ae00ac9028a0186002ae00a6002968188a02ae00a8a", + "0x2957005723599260452c85cf603bc5e0ab2b031c8055c015c80514031ac05", + "0x2e00afb02a1c180c5c0141807063f40afc7d81570077d015120c7d3e5f0f7", + "0x154c0c062e00aff02a0819007f81d70057f0150a0c7f015700506260180c", + "0x2e00af702ac4190302ae00b02028f0190202ae00b0102a00190102ae00b00", + "0x1606055c01606052f031f2055c015f2054a031f0055c015f00525031ee05", + "0x3dc0ab802bdc0ab1064100ab802bf40a480603170050601c19037cbe1eea5", + "0x3dd4a0582015700582014bc0c7c81570057c815280c7c01570057c014940c", + "0x15ac051e83018b802b900a3d06031700506270180c5c014180706411f2f8", + "0x2c80a4206031700545014800c062e00a6002904180c5c01592051e83018b8", + "0x14500c83015700506180190502ae00a0c4c03018b8028b80a42060317005", + "0x160f0803a6c190802ae00a0c598320e055c0160d0503918190602ae00b06", + "0x3d00ab802bd00a4a063cc0ab802bcc0ab1064280ab802c240a48064240ab8", + "0x2e00a0c0383214077a3cd4a0585015700585014bc0c03815700503815280c", + "0x2e00ad6028f4180c5c0159c051c83018b802b500a6206031700506270180c", + "0x1564052103018b802a280a4006031700530014820c062e00ac9028f4180c", + "0x4300a28064300ab802830f60c85815700506260180c5c0145c052103018b8", + "0x2e00b0d8701d360c870157005062cc190d02ae00b0c8581c8c0c860157005", + "0x3162055c01562052503112055c0151205588321e055c015d00524031d005", + "0x3170050601c190f03ac512a502c3c0ab802c3c0a5e0601c0ab80281c0a94", + "0x31700569014720c062e00a2e02908180c5c015b0053103018b802831380c", + "0x2e00ab202908180c5c01514052003018b8029800a41060317005648147a0c", + "0x4400e46064440ab802c440a28064440ab802830ee0c88015700506260180c", + "0x2e00b1402920191402ae00b128981d360c898157005062cc191202ae00b11", + "0x300e055c0140e054a03162055c01562052503112055c0151205588322a05", + "0x188180c5c014189c0603170050601c191503ac512a502c540ab802c540a5e", + "0x3018b802b100a3906031700559014840c062e00a2e02908180c5c0159605", + "0x45c0ab802830ca0c8b015700506260180c5c01514052003018b8029800a41", + "0x1d360c8c8157005062cc191802ae00b178b01c8c0c8b81570058b814500c", + "0x1562052503112055c01512055883236055c01634052403234055c0163119", + "0x1c191b03ac512a502c6c0ab802c6c0a5e0601c0ab80281c0a94062c40ab8", + "0x14840c062e00a2e02908180c5c014c4053103018b802831380c062e00a0c", + "0x20c191c02ae00a0c4c03018b802a000a7006031700545014800c062e00ab2", + "0x2e00a0c598323c055c0163b1c03918191d02ae00b1d028a0191d02ae00a0c", + "0x2240ab802a240ab10619c0ab802c800a48064800ab802c7a3e074d8323e05", + "0x2254a0533815700533814bc0c03815700503815280c58815700558814940c", + "0x1564052103018b8028b80a4206031700506270180c5c01418070619c0eb1", + "0x128188902ae00a8902ac4192102ae00a8202920180c5c01514052003018b8", + "0x1d62895281642055c01642052f0300e055c0140e054a03162055c0156205", + "0x2e00ab202908180c5c0145c052103018b802a440a390603170050601c1921", + "0x2e00a8c02988180c5c0141807060324605062b0192202ae00a5a02ac4180c", + "0x1530055883018b802ac80a4206031700517014840c062e00a91028e4180c", + "0x4940a28064940ab802830000c92015700506260180c5c014189c064880ab8", + "0x2e00b269381d360c938157005062cc192602ae00b259201c8c0c928157005", + "0x3162055c01562052503244055c01644055883252055c0165005240325005", + "0x3170050601c192903ac644a502ca40ab802ca40a5e0601c0ab80281c0a94", + "0x4ac0a0c5603254055c0148c055883018b8028b80a420603170054e814720c", + "0x2e00a2e02908180c5c0153a051c83018b8029040a620603170050601c180c", + "0x2e00a0c6183258055c014189806031700506270192a02ae00a2b02ac4180c", + "0x325e055c01418b3064b80ab802cb65807230325a055c0165a05140325a05", + "0x14940c95015700595015620c98815700598014900c980157005974bc0e9b", + "0x4c40eb1952940b3102ae00b3102978180702ae00a0702a5018b102ae00ab1", + "0x326405062b018fc02ae00aa602ac4180c5c01552051c83018b8028300e0c", + "0x15700552815620c062e00aa9028e4180c5c0144a053103018b8028300e0c", + "0x2e00b34028a0193402ae00a0c6203266055c01418980603170050627018fc", + "0x4dc0ab802cd66c074d8326c055c01418b3064d40ab802cd26607230326805", + "0x15280c58815700558814940c7e01570057e015620c9c01570059b814900c", + "0x1c0180c5c0141807064e00eb17e2940b3802ae00b3802978180702ae00a07", + "0x4e40ab802ce40a28064e40ab802830c00c79015700506260180c5c014f405", + "0x120193c02ae00b3a9d81d360c9d8157005062cc193a02ae00b397901c8c0c", + "0x140e054a0315e055c0155e052503160055c0156005588327a055c0167805", + "0x2c0180702ae00a05029e8193d03abd60a502cf40ab802cf40a5e0601c0ab8", + "0x143a0c580157005528154e0c062e00a0c0383162059f294f4075c01c0e05", + "0x2e00aae0289c18ad02ae00a7a02ab818ae02ae00aaf0289418af02ae00ab0", + "0x2e00aab028b418ab02ae00a0c5583018b8028300e0c064fc0a0c560315805", + "0x50152055c01d58051583158055c0155405138315a055c0156205570315405", + "0x3018b8028300e0c1101682280e81d700756815600c062e00a0c038314e05", + "0x740aae060b40ab80289c0a250609c0ab8028940a1d060940ab8028a00aa7", + "0x31560c062e00a0c03830194202831580c170157005168144e0c158157005", + "0x157005058144e0c158157005110155c0c058157005530145a0c530157005", + "0x50d50055c01c5c05158300c055c015440553031442b03ae00a2b02b14182e", + "0x3170050601c183a02d10729c03ae00ea80601c5c0c062e00a0c038313a05", + "0x1000b45208f40eb8038ac0ab0062700ab802a700ab106031700503014e00c", + "0x1484055683130055c0147a055703084055c01482055783018b8028300e0c", + "0x148c05550308c055c01418ab0603170050601c180ca301418ac062c80ab8", + "0x26c0ab802a600aa6062c80ab802acc0aad062600ab8029000aae062cc0ab8", + "0x74189402ae00a4802a9c180c5c0141807061280b4724015700759015520c", + "0x23cf548482440eb803979380763830bc055c014bc0514030bc055c0152805", + "0x1d900c4d81570054d814160c48815700548815620c062e00a0c038311a8e", + "0x15960c062e00a0c03830b405a4a280ab803a2c0ac90622d18075c0153691", + "0x1580a7a0603170050601c188502d290e055c01d120566031125603ae00a8a", + "0x1478055383018b8028300e0c30016963c4001d700741015600c410157005", + "0x1940ab802a000aae061dc0ab8029ec0a25061ec0ab8029880a1d061880ab8", + "0x20c0ab802831560c062e00a0c03830194c02831580c3801570053b8144e0c", + "0x14560c380157005000144e0c328157005300155c0c000157005418145a0c", + "0x319005a731d8a075c01cca055803018b8028300e0c620169ac302ae00e70", + "0x2e00acb0289418cb02ae00ac90287418c902ae00ac702a9c180c5c0141807", + "0x300e0c0653c0a0c560319e055c0159805138319a055c0158a05570319805", + "0x319a055c015900557031a0055c01584051683184055c01418ab060317005", + "0x15600c062e00a0c03831a405a83440ab803b3c0a2b0633c0ab802b400a27", + "0x3580a1d063580ab802b180aa70603170050601c18d502d458cd303ae00ecd", + "0x1570056c8144e0c6d0157005698155c0c6c81570056c0144a0c6c0157005", + "0x1570056e8145a0c6e8157005062ac180c5c014180706032a405062b018dc", + "0xac18df02ae00ada02a9818dc02ae00ade0289c18da02ae00ad502ab818de", + "0x2e00ace68b0d0e901caa55ecd0603170050601c18e002d4d9c055c01db805", + "0x3500ab802b900ad0063900ab802b8dbe0761031c6055c015c40567831c405", + "0x3018b8028300e0c6a2300e056a01570056a015a20c46015700546015620c", + "0x31700543814e00c062e00ac3028f4180c5c015a2051e83018b802aa40a3d", + "0x399be0761031cc055c015c0056983018b8028e40a4006031700548015a40c", + "0x15700574815a20c46015700546015620c74815700573815a00c738157005", + "0xf4180c5c01552051e83018b8028e40a400603170050601c18e94601c0ae9", + "0x3a80ab802b340aa606031700548015a40c062e00a87029c0180c5c0158605", + "0x2c418ed02ae00aec02b4018ec02ae00aeb7501d840c75815700569015a60c", + "0x14800c062e00a0c03831da8c03815da055c015da056883118055c0151805", + "0x298180c5c0150e053803018b802a400ad2060317005548147a0c062e00a39", + "0x36c0ad00636c0ab802bbddc0761031de055c015880569831dc055c014ca05", + "0x300e0c782300e0578015700578015a20c46015700546015620c780157005", + "0x15a60c062e00a9002b48180c5c01552051e83018b8028e40a40060317005", + "0x15180558831e8055c015e60568031e6055c015e25603b0818f102ae00a85", + "0x2e00a3902900180c5c0141807063d1180702bd00ab802bd00ad1062300ab8", + "0x2300ab1063840ab8029680ac606031700548015a40c062e00aa9028f4180c", + "0x151c056903018b8028300e0c70a300e0570815700570815a20c460157005", + "0x23c0ab1060317005548147a0c062e00a3902900180c5c0151a056903018b8", + "0xe40a4006031700525014c40c062e00a0c03830195402831580c7a8157005", + "0x34c18f602ae00a0c55831ea055c01538055883018b802aa40a3d060317005", + "0x3e40ad1063e40ab802be00ad0063e00ab802bdd360761031ee055c015ec05", + "0x2e00aa9028f4180c5c01456051c83018b8028300e0c7cbd40e057c8157005", + "0x2e00a9d02988180c5c014180706032aa05062b018fa02ae00a3a02ac4180c", + "0x1418ab063e80ab8028300ab1060317005548147a0c062e00a2b028e4180c", + "0x1570057f015a00c7f01570057e8180ec2063f40ab802bec0ad3063ec0ab8", + "0x4000ab802ab40aa60603170050601c18ff7d01c0aff02ae00aff02b4418ff", + "0x2c4190302ae00b0202b40190202ae00b018001d840c80815700553815a60c", + "0x35818aa02ae00a0c6a832060c0381606055c01606056883018055c0141805", + "0x305a055c01418d8060940ab802831b00c1401570050635418a702ae00a0c", + "0x230180c5c014189c06031700506364180b02ae00a0c6a8305c055c01418d5", + "0x3170050601c189c4eaa0f556032a5447a5c01c0e0503b68180c5c014f405", + "0x884e3d1d2c570051c815bc0c1c815700503015ba0c03015700503015b80c", + "0x26084403d2e00a4102b80184102ae00a3a02b38183a02ae00a3a02b7c181d", + "0x38c18a902ae00aa95381dc40c51015700551014940c20015700520015160c", + "0x1da80c110157005110940ee40609c0ab80289c5a07720307a055c0147a05", + "0x29480077303130055c01530054503084055c0148405458303a055c0143a28", + "0xf4180c5c0155e052083018b80289c0a400603170050601c180cab8317007", + "0x3018b8028880a40060317005568147a0c062e00a1d028f4180c5c0155805", + "0x31700517015ce0c062e00a0b02b9c180c5c01554057383018b802ab80a3d", + "0x2e00ab102908180c5c01530052003018b802ac00a400603170051e815d20c", + "0x148c05140308c055c01418ea062c80ab802831300c062e00a4202908180c", + "0x15700559a6c0e9b0626c0ab802831660c598157005232c80e46061180ab8", + "0x25018a202ae00aa202928180c02ae00a0c02ac4184a02ae00a4802bac1848", + "0x3018b8028300e0c252a5440c5281494055c01494057603152055c0155205", + "0x155e052083018b80289c0a400603170050601c180cac0317007589080ee6", + "0x880a40060317005568147a0c062e00a1d028f4180c5c01558051e83018b8", + "0x15ce0c062e00a0b02b9c180c5c01554057383018b802ab80a3d060317005", + "0x260180c5c01530052003018b802ac00a400603170051e815d20c062e00a2e", + "0x2e00a5e4a01c8c0c2f01570052f014500c2f0157005063b4189402ae00a0c", + "0x311c055c0151e05758311e055c015229003a6c189002ae00a0c598312205", + "0x2380aec062a40ab802aa40a94062880ab802a880a4a060300ab8028300ab1", + "0x15dc0c4681570054c015dc0c062e00a0c038311ca9510314a05470157005", + "0x1d16056d83116055c01516051403116055c015188d03bbc188c02ae00ab0", + "0x1595eb8029680af1061680ab8028f40af00603170050601c188a02d6418b8", + "0x1570052b014500c3b9ecc4601e20104af5c0155e057883056a655a150e89", + "0x3112055c015120545030ca055c014ca0514030ca055c015045603bbc1856", + "0x1da80c55815700555aa80ed4062140ab802a140a0b0621c0ab802a1c0af3", + "0x1c187002d6818b8039940adb060ac0ab8028ac5c076a0314c055c0154c0b", + "0x2e00a004181dde0c00015700540015dc0c41815700544815dc0c062e00a0c", + "0x3018b8028300e0c62016b60c5c01d86056d83186055c0158605140318605", + "0x14c4051e83018b802aac0a3d0603170050601c180cae03170071e21c0ef4", + "0x880a40060317005568147a0c062e00a1d028f4180c5c01558051e83018b8", + "0x147a0c062e00a77028f4180c5c0144e052003018b802ab80a3d060317005", + "0x1c0180c5c014c0053803018b802a980a3d0603170053d8147a0c062e00a2b", + "0x31c0ab802b1c0a280631c0ab802831c20c62815700506260180c5c0150a05", + "0x3ac18cb02ae00ac86481d360c648157005062cc18c802ae00ac76281c8c0c", + "0x1552054a03144055c01544052503018055c01418055883198055c0159605", + "0x2140af50603170050601c18cc54a8818a502b300ab802b300aec062a40ab8", + "0x2e00a6002bd418c202ae00acf02bd818cf02ae00acd029e818cd4281d7005", + "0x3080ab802b080af7063480ab802b440af6063440ab802b400a7a06340c007", + "0x147a0c062e00a0c03830195d062e00ed26101df00c69015700569015ee0c", + "0xf4180c5c0143a051e83018b802ab00a3d060317005310147a0c062e00aab", + "0x3018b80289c0a40060317005570147a0c062e00a2202900180c5c0155a05", + "0x317005530147a0c062e00a7b028f4180c5c01456051e83018b8029dc0a3d", + "0x15440525031a6055c01418055883018b802a140a7006031700530014e00c", + "0x2880a4a060300ab8028300ab10603170050601c180caf01418ac063180ab8", + "0x1810aa206295f20c30015700530014160c42815700542814160c510157005", + "0x3640afb0603170050601c18da02d7db2055c01db0057d031b0d66a9e97005", + "0x1570076f015fa0c062e00add029c0180c5c015b80538031bcdd6e1e97005", + "0x147a0c062e00aac028f4180c5c015be053103018b8028300e0c67016c0df", + "0x100180c5c0155c051e83018b8028880a40060317005568147a0c062e00a1d", + "0x3018b8029ec0a3d060317005158147a0c062e00a77028f4180c5c0144e05", + "0x1570056a815620c062e00aab028f4180c5c014c4051e83018b802a980a3d", + "0x3880a28063880ab802831fc0c7001570050626018c602ae00ad60292818d3", + "0x2e00ae37201d360c720157005062cc18e302ae00ae27001c8c0c710157005", + "0x318c055c0158c0525031a6055c015a60558831cc055c015a80575831a805", + "0x3170050601c18e654b19a6a502b980ab802b980aec062a40ab802aa40a94", + "0x15b60c73815700573814500c738157005312ac0eef06031700567014c40c", + "0x15d40514031d4055c014f6a603bbc180c5c0141807063a40b61062e00ee7", + "0x1570053b8ac0eef0603170050601c18eb02d8818b803ba80adb063a80ab8", + "0x3b8180c5c0141807063b40b63062e00eec02b6c18ec02ae00aec028a018ec", + "0x3bc0adb063bc0ab802bbc0a28063bc0ab802ab9dc0777831dc055c0144e05", + "0x2e00aad7801dde0c78015700511015dc0c062e00a0c03831b605b20317007", + "0x3018b8028300e0c79816ca0c5c01de2056d831e2055c015e20514031e205", + "0x31c205b303170077a015b60c7a01570057a014500c7a0157005560740eef", + "0x1570057b016000c7b01570057a815fe0c7a8157005062ac180c5c0141807", + "0x3b018a902ae00aa902a5018d602ae00ad60292818d502ae00ad502ac418f7", + "0x260180c5c015c2058083018b8028300e0c7baa5acd552815ee055c015ee05", + "0x2e00af97c01c8c0c7c81570057c814500c7c81570050640818f802ae00a0c", + "0x31fc055c015fa0575831fa055c015f4fb03a6c18fb02ae00a0c59831f405", + "0x3f80aec062a40ab802aa40a94063580ab802b580a4a063540ab802b540ab1", + "0x2b00a3d06031700579816020c062e00a0c03831fca96b3554a057f0157005", + "0x14500c8001570050640c18ff02ae00a0c4c03018b8028740a3d060317005", + "0x16030203a6c190202ae00a0c5983202055c01600ff03918190002ae00b00", + "0x3580ab802b580a4a063540ab802b540ab1064100ab802c0c0aeb0640c0ab8", + "0x2e00a0c0383208a96b3554a0582015700582015d80c54815700554815280c", + "0x155a051e83018b8028740a3d060317005560147a0c062e00adb02c04180c", + "0x4180a28064180ab802832080c82815700506260180c5c01444052003018b8", + "0x2e00b078401d360c840157005062cc190702ae00b068281c8c0c830157005", + "0x31ac055c015ac0525031aa055c015aa055883214055c0161205758321205", + "0x3170050601c190a54b59aaa502c280ab802c280aec062a40ab802aa40a94", + "0x2e00aad028f4180c5c0143a051e83018b802ab00a3d06031700576816020c", + "0x2e00a0c4c03018b80289c0a40060317005570147a0c062e00a2202900180c", + "0x321a055c016190b03918190c02ae00b0c028a0190c02ae00a0c828321605", + "0x3540ab10643c0ab802ba00aeb063a00ab802c361c074d8321c055c01418b3", + "0x15700587815d80c54815700554815280c6b01570056b014940c6a8157005", + "0x317005560147a0c062e00aeb02c04180c5c01418070643d52d66aa940b0f", + "0x2e00aae028f4180c5c01444052003018b802ab40a3d0603170050e8147a0c", + "0x2e00a0c4c03018b8028ac0a3d0603170053b8147a0c062e00a2702900180c", + "0x3224055c016231003918191102ae00b11028a0191102ae00a0c830322005", + "0x3540ab1064540ab802c500aeb064500ab802c4a26074d83226055c01418b3", + "0x1570058a815d80c54815700554815280c6b01570056b014940c6a8157005", + "0x317005560147a0c062e00ae902c04180c5c01418070645552d66aa940b15", + "0x2e00aae028f4180c5c01444052003018b802ab40a3d0603170050e8147a0c", + "0x14f6051e83018b8028ac0a3d0603170053b8147a0c062e00a2702900180c", + "0x45c0a280645c0ab8028320e0c8b015700506260180c5c0154c051e83018b8", + "0x2e00b188c81d360c8c8157005062cc191802ae00b178b01c8c0c8b8157005", + "0x31ac055c015ac0525031aa055c015aa055883236055c0163405758323405", + "0x3170050601c191b54b59aaa502c6c0ab802c6c0aec062a40ab802aa40a94", + "0x2e00a2202900180c5c0155a051e83018b8028740a3d060317005560147a0c", + "0x1456051e83018b8029dc0a3d06031700513814800c062e00aae028f4180c", + "0x2ac0a3d060317005310147a0c062e00aa6028f4180c5c014f6051e83018b8", + "0x3580ab802b580a4a063540ab802b540ab1064700ab802b680aeb060317005", + "0x2e00a0c0383238a96b3554a058e01570058e015d80c54815700554815280c", + "0x1558051e83018b8029880a3d060317005558147a0c062e00ac402c04180c", + "0x2b80a3d06031700511014800c062e00aad028f4180c5c0143a051e83018b8", + "0x147a0c062e00a2b028f4180c5c014ee051e83018b80289c0a40060317005", + "0x348180c5c0150a053803018b8029800a70060317005530147a0c062e00a7b", + "0x323c055c0141908064740ab802831300c062e00a8702b48180c5c0147805", + "0x4800e9b064800ab802831660c8f81570058f4740e46064780ab802c780a28", + "0x2e00aa202928180c02ae00a0c02ac4192102ae00a6702bac186702ae00b1f", + "0x300e0c90aa5440c5281642055c01642057603152055c01552054a0314405", + "0x147a0c062e00a62028f4180c5c01556051e83018b8029c00b01060317005", + "0xf4180c5c01444052003018b802ab40a3d0603170050e8147a0c062e00aac", + "0x3018b8028ac0a3d0603170053b8147a0c062e00a2702900180c5c0155c05", + "0x31700542814e00c062e00a60029c0180c5c0154c051e83018b8029ec0a3d", + "0x2e00a8902900180c5c01500052003018b802a1c0ad20603170051e015a40c", + "0x4880e46064900ab802c900a28064900ab802832120c91015700506260180c", + "0x2e00b2702bac192702ae00b259301d360c930157005062cc192502ae00b24", + "0x3152055c01552054a03144055c01544052503018055c0141805588325005", + "0x3018b802a280b010603170050601c192854a8818a502ca00ab802ca00aec", + "0x3170050e8147a0c062e00aac028f4180c5c0155e052083018b80289c0a40", + "0x2e00aaa02b9c180c5c0155c051e83018b8028880a40060317005568147a0c", + "0x2e00a0c4c03018b8028f40ae906031700517015ce0c062e00a0b02b9c180c", + "0x3258055c016552903918192a02ae00b2a028a0192a02ae00a0c850325205", + "0x300ab1064bc0ab802cb80aeb064b80ab802cb25a074d8325a055c01418b3", + "0x15700597815d80c54815700554815280c51015700551014940c060157005", + "0x31700512816160c062e00a2802b9c180c5c0141807064bd52a2062940b2f", + "0x2e00ab102908180c5c01558051e83018b802abc0a4106031700552814840c", + "0x1554057383018b802ab80a3d06031700558014800c062e00aad028f4180c", + "0x29c0b0c06031700516816160c062e00a2e02b9c180c5c01416057383018b8", + "0x3f00ab802cc40aeb064c40ab802a7260074d83260055c01418b3060317005", + "0x15d80c4e81570054e815280c54015700554014940c06015700506015620c", + "0x1e80eb80381c0ab00601c0ab8028140a7a063f13aa8062940afc02ae00afc", + "0x315e055c014f4055703160055c0154a055783018b8028300e0c58816cea5", + "0x315a055c01418ab0603170050601c180cb401418ac062b80ab802ac00aad", + "0x2bc0ac5062b80ab802ab00aad062bc0ab802ac40aae062b00ab802ab40aaa", + "0x300e0c53816d2a902ae00eae02aa418aa02ae00aab02a9818ab5781d7005", + "0xa00ab8028a00a28060a00ab8028740a1d060740ab802aa40aa7060317005", + "0x3018b802aa80a700603170050601c182702da84a2203ae00e280601e1a0c", + "0x15ee0c170940eb8028940ae8060ad5e075c0155e05628305a055c014190e", + "0x3018b8028300e0c51016d60b5301d7007170b4562252c3c182d02ae00a2d", + "0x3dc189d1281d700512815d00c54015700503015ec0c032bc0eb802abc0ac5", + "0x1ed8394e01d70074eaa14c7a8803016055c01416055703150055c0155005", + "0x141807061080b6d201040eb8038e44aaf4e2961e0c062e00a0c038307a3a", + "0x308c055c01480055303164055c01530058883130055c01416055303018b8", + "0x16280c20815700520815620c4d815700559816260c598157005591180f12", + "0x2e00a0c4c03018b80282c0a390603170050601c189b2081c0a9b02ae00a9b", + "0x3128055c014944803918184a02ae00a4a028a0184a02ae00a0c8a8309005", + "0x1080ab1062400ab802a440b16062440ab802a50bc074d830bc055c01418b3", + "0x147a058b83018b8028300e0c481080e0548015700548016280c210157005", + "0x141898060317005128162e0c062e00aaf028e4180c5c01416051c83018b8", + "0x2340ab802a391e07230311c055c0151c05140311c055c01419180623c0ab8", + "0x15620c450157005458162c0c45815700546a300e9b062300ab802831660c", + "0x940b170603170050601c188a1d01c0a8a02ae00a8a02c50183a02ae00a3a", + "0x14500c2b015700506454185a02ae00a0c4c03018b802abc0a39060317005", + "0x15128703a6c188702ae00a0c5983112055c014ac5a03918185602ae00a56", + "0x2080ab802a080b14062880ab802a880ab1062080ab802a140b16062140ab8", + "0x16320c400157005062ac180c5c0155e051c83018b8028300e0c412880e05", + "0x144e0558830c4055c014c00589830c0055c01478aa03c48183c02ae00a80", + "0x2e00aa702988180c5c0141807061884e07029880ab8029880b140609c0ab8", + "0x2a80f12061dc0ab8029ec0b19061ec0ab802831560c062e00aaf028e4180c", + "0x2e00a7002c50180c02ae00a0c02ac4187002ae00a6502c4c186502ae00a77", + "0x315eb003db962a503ae00e050601c0a0c062e00a0c4e030e00c03814e005", + "0x2940ab802a940ab10603170050629418ae02ae00a07029e8180c5c0141807", + "0x3154055c01558055783018b8028300e0c55816deac5681d700757015600c", + "0x3170050601c180cb801418ac0629c0ab802aa80aad062a40ab802ab40aae", + "0xa00aad062a40ab802aac0aae060a00ab8028740aaa060740ab802831560c", + "0x1418070609c0b7112815700753815520c110157005548154c0c538157005", + "0x305a055c0145a051403056055c014f4053d0305a055c0144a055383018b8", + "0x2b818a202ae00aa602abc180c5c01418070602c0b72530b80eb8038ac0ab0", + "0x3018b8028300e0c065cc0a0c5603150055c0154405568300c055c0145c05", + "0x153805568300c055c01416055703138055c0153a05550313a055c01418ab", + "0x1570051c8154e0c062e00a0c038307405ba0e40ab803aa00aa9062a00ab8", + "0xa0184202ae00a3d02874184002ae00a2d02874184102ae00a0602a98183d", + "0x2600adb062600ab802a600a28062600ab80290880077783084055c0148405", + "0x314a055c0154a055883018b802831380c062e00a0c038316405ba8317007", + "0x2954af9061040ab8029040a0b060880ab8028880a0b062c40ab802ac40a4a", + "0x3018b802831380c062e00a0c0383136b3231e80a9b59918f4b80290444b1", + "0x12882223d46c184a02ae00a4802c68184802ae00a0c5583018b802ac80b01", + "0x15700558814940c52815700552815620c2f01570054a016380c4a0157005", + "0x3018b802831380c062e00a0c03830bcb1529e80a5e02ae00a5e02c7418b1", + "0x31700503014720c062e00a22029c0180c5c0145a051e83018b8028e80a62", + "0x24122072303120055c01520051403120055c014191e062440ab802831300c", + "0x157005468163e0c46815700547a380e9b062380ab802831660c478157005", + "0x1e80a8c02ae00a8c02c7418b102ae00ab10292818a502ae00aa502ac4188c", + "0x2e00a0c5583018b80289c0a6206031700506270180c5c01418070623162a5", + "0x1570052d016380c2d0157005451e8447a8d83114055c0151605900311605", + "0x1e80a5602ae00a5602c7418b102ae00ab10292818a502ae00aa502ac41856", + "0x14189806031700503814e00c062e00a7a029c0180c5c01418070615962a5", + "0x2140ab802a1d1207230310e055c0150e05140310e055c0141860062240ab8", + "0x15620c1e0157005400163e0c40015700542a080e9b062080ab802831660c", + "0x2c478af581e80a3c02ae00a3c02c7418af02ae00aaf0292818b002ae00ab0", + "0x20c18abbb014187b0601c4e0c03830f407028310446418314a272320c18a5", + "0x1eeeac56ab95eb058a94f407028311246418314a0603018783a1c8e50e46", + "0x2f27a0381418a641830f42713a0c18a5bc01418940601c4e0c" + ], + "sierra_program_debug_info": { + "type_names": [], + "libfunc_names": [], + "user_func_names": [] + }, + "contract_class_version": "0.1.0", + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x3c118a68e16e12e97ed25cb4901c12f4d3162818669cc44c391d8049924c14", + "function_idx": 0 + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + }, + "abi": [ + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::starknet::info::TxInfo", + "members": [ + { + "name": "version", + "type": "core::felt252" + }, + { + "name": "account_contract_address", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "max_fee", + "type": "core::integer::u128" + }, + { + "name": "signature", + "type": "core::array::Span::" + }, + { + "name": "transaction_hash", + "type": "core::felt252" + }, + { + "name": "chain_id", + "type": "core::felt252" + }, + { + "name": "nonce", + "type": "core::felt252" + } + ] + }, + { + "type": "function", + "name": "test_get_execution_info", + "inputs": [ + { + "name": "expected_block_number", + "type": "core::integer::u64" + }, + { + "name": "expected_block_timestamp", + "type": "core::integer::u64" + }, + { + "name": "expected_sequencer_address", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "expected_tx_info", + "type": "core::starknet::info::TxInfo" + }, + { + "name": "expected_caller_address", + "type": "core::felt252" + }, + { + "name": "expected_contract_address", + "type": "core::felt252" + }, + { + "name": "expected_entry_point_selector", + "type": "core::felt252" + } + ], + "outputs": [], + "state_mutability": "view" + }, + { + "type": "event", + "name": "test_contract_execution_info_v1::test_contract_execution_info_v1::TestContract::Event", + "kind": "enum", + "variants": [] + } + ] +} \ No newline at end of file diff --git a/crates/blockifier/feature_contracts/cairo_native/test_contract_execution_info_v1.cairo b/crates/blockifier/feature_contracts/cairo_native/test_contract_execution_info_v1.cairo new file mode 100644 index 0000000000..a6753f2fb2 --- /dev/null +++ b/crates/blockifier/feature_contracts/cairo_native/test_contract_execution_info_v1.cairo @@ -0,0 +1,58 @@ +#[starknet::contract] +mod TestContract { + use box::BoxTrait; + use starknet::ClassHash; + use starknet::ContractAddress; + use starknet::syscalls::get_execution_info_syscall; + use starknet::info::ExecutionInfo; + use starknet::info::BlockInfo; + use starknet::info::TxInfo; + use starknet::{SyscallResultTrait, SyscallResult}; + + #[storage] + struct Storage {} + + #[external(v0)] + fn test_get_execution_info( + self: @ContractState, + expected_block_number: u64, + expected_block_timestamp: u64, + expected_sequencer_address: ContractAddress, + expected_tx_info: TxInfo, + expected_caller_address: felt252, + expected_contract_address: felt252, + expected_entry_point_selector: felt252, + ) { + let execution_info = get_execution_info_syscall().unwrap_syscall().unbox(); + let block_info = execution_info.block_info.unbox(); + + assert(block_info.block_number == expected_block_number, 'BLOCK_NUMBER_MISMATCH'); + assert(block_info.block_timestamp == expected_block_timestamp, 'BLOCK_TIMESTAMP_MISMATCH'); + assert( + block_info.sequencer_address.into() == expected_sequencer_address, 'SEQUENCER_MISMATCH', + ); + + let tx_info = execution_info.tx_info.unbox(); + assert(tx_info.version == expected_tx_info.version, 'TX_INFO_VERSION_MISMATCH'); + assert( + tx_info.account_contract_address.into() == expected_tx_info.account_contract_address, + 'ACCOUNT_C_ADDRESS_MISMATCH', + ); + assert(tx_info.max_fee == expected_tx_info.max_fee, 'TX_INFO_MAX_FEE_MISMATCH'); + assert(tx_info.signature == expected_tx_info.signature, 'TX_INFO_SIGNATURE_MISMATCH'); + assert( + tx_info.transaction_hash == expected_tx_info.transaction_hash, 'TX_INFO_HASH_MISMATCH', + ); + assert(tx_info.chain_id == expected_tx_info.chain_id, 'TX_INFO_CHAIN_ID_MISMATCH'); + assert(tx_info.nonce == expected_tx_info.nonce, 'TX_INFO_NONCE_MISMATCH'); + + assert(execution_info.caller_address.into() == expected_caller_address, 'CALLER_MISMATCH'); + assert( + execution_info.contract_address.into() == expected_contract_address, 'CONTRACT_MISMATCH' + ); + assert( + execution_info.entry_point_selector == expected_entry_point_selector, + 'SELECTOR_MISMATCH' + ); + } +} \ No newline at end of file diff --git a/crates/blockifier/src/execution/deprecated_syscalls/hint_processor.rs b/crates/blockifier/src/execution/deprecated_syscalls/hint_processor.rs index c94c4f8806..332f037c7f 100644 --- a/crates/blockifier/src/execution/deprecated_syscalls/hint_processor.rs +++ b/crates/blockifier/src/execution/deprecated_syscalls/hint_processor.rs @@ -64,7 +64,6 @@ use crate::execution::errors::{ConstructorEntryPointExecutionError, EntryPointEx use crate::execution::execution_utils::{ felt_from_ptr, felt_range_from_ptr, - max_fee_for_execution_info, ReadOnlySegment, ReadOnlySegments, }; @@ -389,7 +388,7 @@ impl<'a> DeprecatedSyscallHintProcessor<'a> { let tx_info: Vec = vec![ tx_info.signed_version().0.into(), (*tx_info.sender_address().0.key()).into(), - max_fee_for_execution_info(tx_info).into(), + Felt::from(tx_info.max_fee_for_execution_info_syscall().0).into(), tx_signature_length.into(), tx_signature_start_ptr.into(), tx_info.transaction_hash().0.into(), diff --git a/crates/blockifier/src/execution/execution_utils.rs b/crates/blockifier/src/execution/execution_utils.rs index a687c7544d..eb85e6c6fa 100644 --- a/crates/blockifier/src/execution/execution_utils.rs +++ b/crates/blockifier/src/execution/execution_utils.rs @@ -45,7 +45,6 @@ use crate::execution::stack_trace::extract_trailing_cairo1_revert_trace; use crate::execution::{deprecated_entry_point_execution, entry_point_execution}; use crate::state::errors::StateError; use crate::state::state_api::State; -use crate::transaction::objects::TransactionInfo; pub type Args = Vec; @@ -361,14 +360,6 @@ pub fn write_maybe_relocatable>( Ok(()) } -pub fn max_fee_for_execution_info(tx_info: &TransactionInfo) -> Felt { - match tx_info { - TransactionInfo::Current(_) => 0, - TransactionInfo::Deprecated(tx_info) => tx_info.max_fee.0, - } - .into() -} - /// Returns the VM resources required for running `poseidon_hash_many` in the Starknet OS. pub fn poseidon_hash_many_cost(data_length: usize) -> ExecutionResources { ExecutionResources { diff --git a/crates/blockifier/src/execution/native/syscall_handler.rs b/crates/blockifier/src/execution/native/syscall_handler.rs index ec882a2840..48cf8e76d0 100644 --- a/crates/blockifier/src/execution/native/syscall_handler.rs +++ b/crates/blockifier/src/execution/native/syscall_handler.rs @@ -2,12 +2,14 @@ use std::collections::HashSet; use std::hash::RandomState; use cairo_native::starknet::{ + BlockInfo, ExecutionInfo, ExecutionInfoV2, Secp256k1Point, Secp256r1Point, StarknetSyscallHandler, SyscallResult, + TxInfo, U256, }; use cairo_vm::vm::runners::cairo_runner::ExecutionResources; @@ -23,6 +25,7 @@ use crate::execution::call_info::{ OrderedL2ToL1Message, Retdata, }; +use crate::execution::common_hints::ExecutionMode; use crate::execution::entry_point::{CallEntryPoint, EntryPointExecutionContext}; use crate::execution::errors::EntryPointExecutionError; use crate::execution::syscalls::hint_processor::{ @@ -161,6 +164,51 @@ impl<'state> NativeSyscallHandler<'state> { } } } + + fn get_tx_info_v1(&self) -> TxInfo { + let tx_info = &self.context.tx_context.tx_info; + TxInfo { + version: tx_info.version().0, + account_contract_address: Felt::from(tx_info.sender_address()), + max_fee: tx_info.max_fee_for_execution_info_syscall().0, + signature: tx_info.signature().0, + transaction_hash: tx_info.transaction_hash().0, + chain_id: Felt::from_hex( + &self.context.tx_context.block_context.chain_info.chain_id.as_hex(), + ) + .expect("Failed to convert the chain_id to hex."), + nonce: tx_info.nonce().0, + } + } + + fn get_block_info(&self) -> BlockInfo { + let block_info = &self.context.tx_context.block_context.block_info; + if self.context.execution_mode == ExecutionMode::Validate { + let versioned_constants = self.context.versioned_constants(); + let block_number = block_info.block_number.0; + let block_timestamp = block_info.block_timestamp.0; + // Round down to the nearest multiple of validate_block_number_rounding. + let validate_block_number_rounding = + versioned_constants.get_validate_block_number_rounding(); + let rounded_block_number = + (block_number / validate_block_number_rounding) * validate_block_number_rounding; + // Round down to the nearest multiple of validate_timestamp_rounding. + let validate_timestamp_rounding = versioned_constants.get_validate_timestamp_rounding(); + let rounded_timestamp = + (block_timestamp / validate_timestamp_rounding) * validate_timestamp_rounding; + BlockInfo { + block_number: rounded_block_number, + block_timestamp: rounded_timestamp, + sequencer_address: Felt::ZERO, + } + } else { + BlockInfo { + block_number: block_info.block_number.0, + block_timestamp: block_info.block_timestamp.0, + sequencer_address: Felt::from(block_info.sequencer_address), + } + } + } } impl<'state> StarknetSyscallHandler for &mut NativeSyscallHandler<'state> { @@ -172,8 +220,19 @@ impl<'state> StarknetSyscallHandler for &mut NativeSyscallHandler<'state> { todo!("Implement get_block_hash syscall."); } - fn get_execution_info(&mut self, _remaining_gas: &mut u128) -> SyscallResult { - todo!("Implement get_execution_info syscall."); + fn get_execution_info(&mut self, remaining_gas: &mut u128) -> SyscallResult { + self.pre_execute_syscall( + remaining_gas, + self.context.gas_costs().get_execution_info_gas_cost, + )?; + + Ok(ExecutionInfo { + block_info: self.get_block_info(), + tx_info: self.get_tx_info_v1(), + caller_address: Felt::from(self.call.caller_address), + contract_address: Felt::from(self.call.storage_address), + entry_point_selector: self.call.entry_point_selector.0, + }) } fn get_execution_info_v2( diff --git a/crates/blockifier/src/execution/syscalls/hint_processor.rs b/crates/blockifier/src/execution/syscalls/hint_processor.rs index a7fb67f61c..04d42f7e87 100644 --- a/crates/blockifier/src/execution/syscalls/hint_processor.rs +++ b/crates/blockifier/src/execution/syscalls/hint_processor.rs @@ -34,7 +34,6 @@ use crate::execution::errors::{ConstructorEntryPointExecutionError, EntryPointEx use crate::execution::execution_utils::{ felt_from_ptr, felt_range_from_ptr, - max_fee_for_execution_info, write_maybe_relocatable, ReadOnlySegment, ReadOnlySegments, @@ -638,7 +637,7 @@ impl<'a> SyscallHintProcessor<'a> { let mut tx_data: Vec = vec![ tx_info.signed_version().0.into(), tx_info.sender_address().0.key().into(), - max_fee_for_execution_info(tx_info).into(), + Felt::from(tx_info.max_fee_for_execution_info_syscall().0).into(), tx_signature_start_ptr.into(), tx_signature_end_ptr.into(), (tx_info).transaction_hash().0.into(), diff --git a/crates/blockifier/src/execution/syscalls/syscall_tests/get_execution_info.rs b/crates/blockifier/src/execution/syscalls/syscall_tests/get_execution_info.rs index 3692b62e9d..f0feb210f0 100644 --- a/crates/blockifier/src/execution/syscalls/syscall_tests/get_execution_info.rs +++ b/crates/blockifier/src/execution/syscalls/syscall_tests/get_execution_info.rs @@ -42,6 +42,26 @@ use crate::transaction::objects::{ TransactionInfo, }; +#[cfg_attr( + feature = "cairo_native", + test_case( + FeatureContract::SierraExecutionInfoV1Contract, + ExecutionMode::Validate, + TransactionVersion::ONE, + false; + "Native [V1]: Validate execution mode: block info fields should be zeroed. Transaction V1." + ) +)] +#[cfg_attr( + feature = "cairo_native", + test_case( + FeatureContract::SierraExecutionInfoV1Contract, + ExecutionMode::Execute, + TransactionVersion::ONE, + false; + "Native [V1]: Execute execution mode: block info should be as usual. Transaction V1." + ) +)] #[test_case( FeatureContract::TestContract(CairoVersion::Cairo1), ExecutionMode::Validate, @@ -121,6 +141,10 @@ fn test_get_execution_info( }; vec![] } + #[cfg(feature = "cairo_native")] + FeatureContract::SierraExecutionInfoV1Contract => { + vec![] + } _ => { vec![ Felt::ZERO, // Tip. @@ -148,6 +172,8 @@ fn test_get_execution_info( let expected_resource_bounds: Vec = match (test_contract, version) { (FeatureContract::LegacyTestContract, _) => vec![], + #[cfg(feature = "cairo_native")] + (FeatureContract::SierraExecutionInfoV1Contract, _) => vec![], (_, version) if version == TransactionVersion::ONE => vec![ felt!(0_u16), // Length of resource bounds array. ], diff --git a/crates/blockifier/src/test_utils/contracts.rs b/crates/blockifier/src/test_utils/contracts.rs index ae417951e6..a19ee4501e 100644 --- a/crates/blockifier/src/test_utils/contracts.rs +++ b/crates/blockifier/src/test_utils/contracts.rs @@ -55,6 +55,8 @@ const SECURITY_TEST_CONTRACT_BASE: u32 = 6 * CLASS_HASH_BASE; const TEST_CONTRACT_BASE: u32 = 7 * CLASS_HASH_BASE; const ERC20_CONTRACT_BASE: u32 = 8 * CLASS_HASH_BASE; const CAIRO_STEPS_TEST_CONTRACT_BASE: u32 = 9 * CLASS_HASH_BASE; +#[cfg(feature = "cairo_native")] +const SIERRA_EXECUTION_INFO_V1_CONTRACT_BASE: u32 = 10 * CLASS_HASH_BASE; // Contract names. const ACCOUNT_LONG_VALIDATE_NAME: &str = "account_with_long_validate"; @@ -65,6 +67,8 @@ const LEGACY_CONTRACT_NAME: &str = "legacy_test_contract"; const SECURITY_TEST_CONTRACT_NAME: &str = "security_tests_contract"; const TEST_CONTRACT_NAME: &str = "test_contract"; const CAIRO_STEPS_TEST_CONTRACT_NAME: &str = "cairo_steps_test_contract"; +#[cfg(feature = "cairo_native")] +const EXECUTION_INFO_V1_CONTRACT_NAME: &str = "test_contract_execution_info_v1"; // ERC20 contract is in a unique location. const ERC20_CAIRO0_CONTRACT_SOURCE_PATH: &str = @@ -95,6 +99,8 @@ pub enum FeatureContract { SecurityTests, TestContract(CairoVersion), CairoStepsTestContract, + #[cfg(feature = "cairo_native")] + SierraExecutionInfoV1Contract, } impl FeatureContract { @@ -108,6 +114,8 @@ impl FeatureContract { | Self::ERC20(version) => *version, Self::SecurityTests => CairoVersion::Cairo0, Self::LegacyTestContract | Self::CairoStepsTestContract => CairoVersion::Cairo1, + #[cfg(feature = "cairo_native")] + Self::SierraExecutionInfoV1Contract => CairoVersion::Native, } } @@ -119,6 +127,8 @@ impl FeatureContract { | Self::FaultyAccount(_) | Self::TestContract(_) | Self::ERC20(_) => true, + #[cfg(feature = "cairo_native")] + Self::SierraExecutionInfoV1Contract => false, Self::SecurityTests | Self::LegacyTestContract | Self::CairoStepsTestContract => false, } } @@ -134,6 +144,10 @@ impl FeatureContract { Self::LegacyTestContract | Self::SecurityTests | Self::CairoStepsTestContract => { panic!("{self:?} contract has no configurable version.") } + #[cfg(feature = "cairo_native")] + Self::SierraExecutionInfoV1Contract => { + panic!("{self:?} contract has no configurable version.") + } } } @@ -224,6 +238,8 @@ impl FeatureContract { Self::SecurityTests => SECURITY_TEST_CONTRACT_BASE, Self::TestContract(_) => TEST_CONTRACT_BASE, Self::CairoStepsTestContract => CAIRO_STEPS_TEST_CONTRACT_BASE, + #[cfg(feature = "cairo_native")] + Self::SierraExecutionInfoV1Contract => SIERRA_EXECUTION_INFO_V1_CONTRACT_BASE, } } @@ -237,6 +253,8 @@ impl FeatureContract { Self::SecurityTests => SECURITY_TEST_CONTRACT_NAME, Self::TestContract(_) => TEST_CONTRACT_NAME, Self::CairoStepsTestContract => CAIRO_STEPS_TEST_CONTRACT_NAME, + #[cfg(feature = "cairo_native")] + Self::SierraExecutionInfoV1Contract => EXECUTION_INFO_V1_CONTRACT_NAME, Self::ERC20(_) => unreachable!(), } } @@ -314,6 +332,8 @@ impl FeatureContract { | FeatureContract::TestContract(_) | FeatureContract::LegacyTestContract | FeatureContract::CairoStepsTestContract => None, + #[cfg(feature = "cairo_native")] + FeatureContract::SierraExecutionInfoV1Contract => None, FeatureContract::ERC20(_) => unreachable!(), }; cairo0_compile(self.get_source_path(), extra_arg, false) diff --git a/crates/blockifier/src/transaction/objects.rs b/crates/blockifier/src/transaction/objects.rs index c929fe56f3..5478c7e8b3 100644 --- a/crates/blockifier/src/transaction/objects.rs +++ b/crates/blockifier/src/transaction/objects.rs @@ -97,6 +97,13 @@ impl TransactionInfo { TransactionInfo::Deprecated(_) => GasVectorComputationMode::NoL2Gas, } } + + pub fn max_fee_for_execution_info_syscall(&self) -> Fee { + match self { + Self::Current(_) => Fee(0), + Self::Deprecated(context) => context.max_fee, + } + } } impl HasRelatedFeeType for TransactionInfo {